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

だから[]はArrayオブジェクトを返します。 slice.callは、もし私が正しいなら、1から始まる引数の内容で新しい配列を作成します。このjsスニペットはどのように機能しますか?

しかし、関数(cb)はどのように機能しますか?それはどこでcbを得るのですか?

答えて

2

function(cb) { ... }は、関数を作成します。

cbが渡される引数です。

関数が呼び出されたときにそれを取得します。

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

引数になりました(あなたが言ったように最初のものを除く)のすべてのthunkify引数を保持する配列です。 args配列は、返された関数が呼び出されるたびにプッシュされるcb関数を取得する(thats closure、返された関数は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

関連する問題