回调函数是什么在学习之前还真不知道js回调函数怎么使用及作用了,下面本文章把我在学习回调函数例子给各位同学介绍一下吧,有需了解的同学不防进入参考。

回调函数原理:

我现在出发,到了通知你”

这是一个异步的流程,“我出发”这个过程中(函数执行),“你”可以去做任何事,“到了”(函数执行完毕)“通知你”(回调)进行之后的流程

例子

1.基本方法

function doSomething(callback) {

// …

// Call the callback

callback('stuff', 'goes', 'here');

}

function foo(a, b, c) {

// I'm the callback

alert(a + " " + b + " " + c);

}

doSomething(foo);

或者用匿名函数的形式

function dosomething(damsg, callback){

alert(damsg);

if(typeof callback == "function")

callback();

}

dosomething("回调函数", function(){

alert("和 jQuery 的 callbacks 形式一样!");

});

2.高级方法

使用javascript的call方法

function Thing(name) {

this.name = name;

}

Thing.prototype.doSomething = function(callback) {

// Call our callback, but using our own instance as the context

callback.call(this);

}

function foo() {

alert(this.name);

}

var t = new Thing('Joe');

t.doSomething(foo); // Alerts "Joe" via `foo`

传参数

function Thing(name) {

this.name = name;

}

Thing.prototype.doSomething = function(callback, salutation) {

// Call our callback, but using our own instance as the context

callback.call(this, salutation);

}

function foo(salutation) {

alert(salutation + " " + this.name);

}

var t = new Thing('Joe');

t.doSomething(foo, 'Hi'); // Alerts "Hi Joe" via `foo`

使用 javascript 的 apply 传参数

function Thing(name) {

this.name = name;

}

Thing.prototype.doSomething = function(callback) {

// Call our callback, but using our own instance as the context

callback.apply(this, ['Hi', 3, 2, 1]);

}

function foo(salutation, three, two, one) {

alert(salutation + " " + this.name + " – " + three + " " + two + " " + one);

}

var t = new Thing('Joe');

t.doSomething(foo); // Alerts "Hi Joe – 3 2 1" via `foo`

例子

//假如提供的数据源是一整数,为某学生的分数,当num<=0,由底层处理,当n>0时由高层处理.

//将下面这个函数拷贝下来存盘为1.js

function f(num,callback){

if(num<0) {

alert("调用低层函数处理!");

alert("分数不能为负,输入错误!");

}else if(num==0){

alert("调用低层函数处理!");

alert("该学生可能未参加考试!");

}else{

alert("调用高层函数处理!");

callback();

}

}

//将下面这个test.html文件存盘与1.js在一个目录下:

/p>

"http://www.w3.org/TR/html4/loose.dtd">

无标题文档

function test(){

var p=document.getElementById("pp");

pp.innerText="";

var num=document.getElementById("score").value;

f(num,function(){ //匿名高层处理函数

if(num<60) alert("未及格!");

else if(num<=90) alert("该生成绩优良!");

else alert("该生成绩优秀!"); })

pp.innerText="by since1978 qq558064!"

}

回调函数示例:当学生成绩score<=0分时候,由底层处理;当score>0时,由高层处理。

请输入学生成绩

下面是其它网友的补充:

javascript中的回调模式:

形如:

function writeCode(callback){

//执行一些事物,

callback();

//...

}

function intrduceBugs(){

//....引入漏洞

}

writeCode(intrduceBugs);

我们传递函数的应用给writeCode(),让writeCode在适当的时候来执行它(返回以后调用)

先看一个不怎么好的例子(后续要对其重构):

//模拟查找页面中的dom节点,将查找到的节点存在数组里面统一返回

//此函数只用于查找不对dom节点做任何的逻辑处理

var findNodes = function(){

var i = 100000;//大量的循环,

var nodes = [];//用于存储找到的dom节点

var found;

while(i){

i -=1;

nodes.push(found);

}

return nodes;

}

//将查找找到的dom节点全部隐藏

var hide = function(nodes){

var i = 0,

max = nodes.length;

for(;i

//findNodes后面有括号代表立即执行,先执行findNodes()然后执行hide()< hide(findNodes()); 执行函数 } ;

nodes[i].style.display="none"

}

上面的方法是低效的,以为hide()必须再次遍历有findNodes()返回的数组节点,如何避免这种多余的循环呢。

我们不能直接在findNodes中对查询到的节点进行隐藏(这样检索就可修改逻辑耦合了),那么他就不再是一个通用函数了。

解决方法是用回调模式,可以将节点隐藏逻辑以回调函数方式传递给findNodes()并委托其执行

//重构findNodes以接受一个回调函数

var findNodes = fucntion(callback){

var i = 100000,

nodes = [],

found;

//检查回调函数是否可用调用的

if(typeof callback !== 'function'){

callback = false;

}

while(i){

i -= 1;

if(callback){

callback(found);

}

nodes.push(found);

}

return nodes;

}

//回调函数

var hide = function(node){

node.style.display = 'none ';

}

//找到后续节点并在后续执行中对其进行隐藏

findNodes(hide);//先执行findNodes然后执行hide,当然回调函数也可以在调用主函数时创建:findNodes(function(node){node.style.display = 'none';});

html js 回调函数,js中回调函数的学习笔记相关推荐

  1. html中text函数,Excel中text函数的使用方法

    说到Excel,相信大家都再熟悉不过了,但说到Excel中text函数的使用方法,可能很多人都不太熟悉,下面随学习啦小编一起看看吧. Excel中text函数的使用方法 首先解释一下text函数的基本 ...

  2. linux 内核 fget,fgets函数 linux中fgets函数怎么用

    一个函数该如何使用?我们最先要了解的就是这个函数的语法以及具体的含义是什么,所以今天我们就来看一看fgets函数在实际的运用过程当中是如何使用的,希望能给大家带来一定的帮助. fgets函数--lin ...

  3. mysql中sign函数_Oracle中sign函数和decode函数的使用

    在逻辑编程中,经常用到If ndash; Then ndash;Else 进行逻辑判断.在DECODE的语法中,实际上就是这样的逻辑处理过程.它的语法 1.比较大小函数SIGN sign(x)或者Si ...

  4. C++ 中 参数包 (typename ...) 学习笔记

    C++ 中 参数包 (typename -) 学习笔记 本文所属地址 https://www.lucien.ink 起因 突然好奇 STL 的 std::tuple 是怎么实现不定参数的,遂搜了搜,发 ...

  5. 数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一)

    数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一) 步骤: 1. 创建SILVERLIGHT应用程序 2. 创建LINQ TO SQL [注意序列化的问题 ...

  6. web前端分享HTML5中的nav标签学习笔记

    好程序员web前端分享HTML5中的nav标签学习笔记,nav标签全称navigation,顾名思义,是导航的意思.根据HTML5的相关标准定义如下: "A section of a pag ...

  7. python中execute函数_python中的函数是如何使用的?

    欢迎关注「issnail」感谢! "一起学习,一起成长!" 1.定义函数与调用函数 定义python函数:依次输入def.函数名.带有函数参数的圆括号,最后紧跟一个冒号(:) 函数 ...

  8. c++语言swap函数,C++中swap函数

    本文是我用到swap函数时,对其产生好奇,所以结合网上有关博文写下的.个人水平有限,若有错误的地方,欢迎留言指出.谢谢! 一.通用的函数交换模板 template void swap(T &a ...

  9. c语言createthread函数,C++中CreateThread函数创建线程的用法和实例

    CreateThread是一种微软在Windows API中提供了建立新的线程的函数,该函数在主线程的基础上创建一个新线程.线程终止运行后,线程对象仍然在系统中,必须通过CloseHandle函数来关 ...

  10. python local函数_python中的函数

    函数 一.函数的定义 def是可执行的代码.def创建了一个对象并将其赋值给某一变量名.def语句是实时执行的,即:def在运行时才进行评估,而在def之中的代码在函数调用后才会评估.函数本身就是一个 ...

最新文章

  1. Oracle 用户表空间的创建和授权
  2. linux iptables详解
  3. Java8简明学习之接口默认方法
  4. 数据中台产品经理面试指南(二)
  5. 关于开源中国手机App的说明
  6. c语言汇编混合编程写一个乘法,求通过C语言实现矩阵的加、减及乘法。要自己写的,不要复制过来...
  7. 安卓升级鸿蒙,网友实测从安卓升级到鸿蒙2.0:可用内存和机身存储容量都增加了...
  8. java之父_java之父:被下载达7000万次的编程视频教程,你还没有看过?
  9. QT实现头像图片剪切框
  10. keep-alive + vuex + mint + Infinite scroll 保存分页列表数据
  11. Cisco基础(六):配置目前网络环境、项目阶段练习
  12. 网页制作初期,必须的东西
  13. tiptop对接泛微OA详细步骤
  14. 使用rsync实现客户端与服务器端的文件同步与传送
  15. 打印 条码 CodeSoft JsBarCode
  16. php隐藏下载外链,教你如何去掉友荐和无觅的隐藏外链和版权链接
  17. Redis数据类型和应用场景
  18. 分享几个写英文论文的网页和软件
  19. 常用windows XP 系统命令
  20. DD每周前端七题详解-第五期

热门文章

  1. java的for循环取出数据只是拿到最后一个_如何保证缓存与数据库双写的一致性...
  2. devsecops_DevSecOps管道和工具:您需要了解的内容
  3. (14)css—伪类选择器
  4. (13) css浮动补充
  5. 前端:JS/17/前篇总结(JS程序的基本语法,变量),数据类型-变量的类型(数值型,字符型,布尔型,未定义型,空型),数据类型转换,typeof()判断数据类型,从字符串提取整数或浮点数的函数
  6. Git笔记(38) 凭证存储
  7. java最大最小距离算法缺点_java算法(蓝桥杯)- 算法提高 题目1 最大最小值
  8. centos 6.8安装git_git 入门教程之 git 私服搭建教程
  9. PHP中如何判断属性类型,php – 如何获取doctrine实体属性的类型
  10. NOIP2013NOIP2018USACO 三倍经验铺路题巧妙解法