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");


先记录这些,之后如果碰到新的情况再继续补充~



转载于:https://my.oschina.net/u/659286/blog/663190

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值