这个js片段是如何工作的?

时间:2016-08-08 12:24:11

标签: javascript

function thunkify(fn) {
    var args = [].slice.call( arguments, 1 );
    return function(cb) {
        args.push( cb );
        return fn.apply( null, args );
    };
}

所以[]返回一个Array对象。然后slice.call创建一个新数组,如果我是对的话,参数的内容从1开始。

但是函数(cb)如何工作?你在哪里得到cb?

2 个答案:

答案 0 :(得分:2)

function(cb) { ... }创建了一个函数。

cb是传递给它的参数。

调用函数时可以得到它。

var thunkified = thunkify(someFunction);
thunkified("the value of cb");

答案 1 :(得分:2)

args现在是一个包含所有thunkify args的数组(除了你说的第一个)。 那个args数组,比每次调用返回的函数时都得到一个cb函数(这就是闭包,返回的函数可以访问thunkify函数中的args)。

var myfn = thunkify(fn, 1, 2, 3); //now args is [1, 2, 3]; myfn(4); //now args is [1, 2, 3, 4] and fn is called with that array