1

このようなカレー関数では:

var curry = function() {
    var slice = Array.prototype.slice,
        args = slice.call(arguments),
        fn = args.shift();

    return function(){
        return fn.apply(null, args.concat(slice.call(arguments)));
    };
};

と の間に違いはありますthisか? それが違いを生む可能性があるケースは見当たりません。nullfn.apply


編集 :

この回答のおかげで、今ではかなり明確になったと思います。これをアンダーサンドするために作成した小さな例を次に示します。

function msg() {
    console.log(this.name);
}

var foo = { name: "foo"};

var msg_this = curry_this(msg);
var msg_null = curry_null(msg);

msg_this();         //msg.call(null) -> undefined
msg_null();         //msg.call(null) -> undefined
msg_this.call(foo); //msg.call(foo) -> foo
msg_null.call(foo); //msg.call(null) -> undefined

curry_this戻るfn.apply(this,...curry_null戻る_fn.apply(null...

4

1 に答える 1

1

apply に渡すnullと、コンテキストがグローバルになります (windowブラウザ内)。

MDNから:

メソッドが非厳密モード コードの関数である場合、null および undefined はグローバル オブジェクトに置き換えられ、プリミティブ値はボックス化されます。

これが結果に与える影響は、fn関数 ( の最初の引数curry) と呼び出し方によって異なります。

このコードを参照してください:

var a = {curried: curry(function(){console.log(this)})};
a.curried();

nullapply に渡すとwindow、 object の代わりにログに記録されますa

于 2013-01-17T11:50:39.460 に答える