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

传递null给应用使上下文成为全局上下文(window在浏览器中)。

来自MDN

如果方法是非严格模式代码中的函数,null 和 undefined 将被替换为全局对象,原始值将被装箱。

这将如何影响结果取决于fn函数( 的第一个参数curry)以及您如何调用它。

请参阅此代码:

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

如果您通过null申请,它会记录window而不是 object a

于 2013-01-17T11:50:39.460 回答