javascript的回调函数
2016-04-20 00:00
316 查看
摘要: 回调是GOF中的一种设计模式,java中是方法中使用接口(interface)来实现回调模式;
而javascript的回调方法就显得更加的多变;
在JavaScript中,回调函数具体的定义为:函数A作为参数(函数引用)传递到另一个函数B中,并且这个函数B执行函数A。我们就说函数A叫做回调函数。如果没有名称(函数表达式),就叫做匿名回调函数。
因此callback 不一定用于异步,一般同步(阻塞)的场景下也经常用到回调,比如要求执行某些操作后执行回调函数。
1.基本方法
例子
一个同步(阻塞)中使用回调的例子,目的是在func1代码执行完成后执行func2。
或者匿名函数的方式
2. 高级方法
使用call方法
传参数
3. 得到callback是字符串
有的时候,callback可能是一个参数,这样获得的callback可能会是一个字符串;
这个时候就需要使用 eval()方法,把字符串转义成function
单体
先记录这些,之后如果碰到新的情况再继续补充~
而javascript的回调方法就显得更加的多变;
在JavaScript中,回调函数具体的定义为:函数A作为参数(函数引用)传递到另一个函数B中,并且这个函数B执行函数A。我们就说函数A叫做回调函数。如果没有名称(函数表达式),就叫做匿名回调函数。
因此callback 不一定用于异步,一般同步(阻塞)的场景下也经常用到回调,比如要求执行某些操作后执行回调函数。
1.基本方法
例子
一个同步(阻塞)中使用回调的例子,目的是在func1代码执行完成后执行func2。
var func = function(callback){ //do something. (callback && typeof(callback) === "function") && callback(); }; var target = function(){ alert("callback"); }; func(target);
或者匿名函数的方式
var func = function(callback){ //do something. (callback && typeof(callback) === "function") && callback(); }; func(function(){ alert(2); });
2. 高级方法
使用call方法
function Person(name){ this.name = name; } Person.prototype.doSomething = function(callback){ (callback && typeof(callback) === "function") && callback.call(this); }; function foo(){ alert(this.name); } var person = new Person('Joe'); person.doSomething(foo);
传参数
function Person(name){ this.name = name; } Person.prototype.doSomething = function(callback, age){ (callback && typeof(callback) === "function") && callback.call(this, age); }; function foo(age){ alert("name:" + this.name + "\nage:" + age); } var person = new Person('Isaac'); person.doSomething(foo, 100);
3. 得到callback是字符串
有的时候,callback可能是一个参数,这样获得的callback可能会是一个字符串;
这个时候就需要使用 eval()方法,把字符串转义成function
var func = function(callback){ if(!callback) return; typeof(callback) === "string" && (callback = eval(callback)); typeof(callback) === "function" && callback(); }; var target = function(){ alert("target"); }; func("target");
单体
var sin = { fn: function(){ alert("sin.fn()"); } }; sin.pa = { fn: function(){ alert("sin.pa.fn()"); } }; var func = function(callback){ if(!callback) return; typeof(callback) === "string" && (callback = eval(callback)); typeof(callback) === "function" && callback(); }; func("sin.fn"); func("sin.pa.fn");
先记录这些,之后如果碰到新的情况再继续补充~
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 最后一次说说闭包
- Ajax
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子
- JavaScript 各种遍历方式详解
- call/apply/bind 的理解与实例分享