在像这样的咖喱函数中:
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
中的null
或fn.apply
之间有什么区别吗?我没有看到它可以产生影响的情况。
编辑:
感谢this answer我认为现在很清楚,这是我做的一个小例子:
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...
答案 0 :(得分:1)
将null
传递给应用会使上下文成为全局上下文(浏览器中为window
)。
来自the MDN:
如果方法是非严格模式代码中的函数,则为null undefined将替换为全局对象和原始对象 价值将被装箱。
这将如何影响结果取决于fn
函数(curry
的第一个参数)以及您如何调用它。
请参阅此代码:
var a = {curried: curry(function(){console.log(this)})};
a.curried();
如果您通过null
申请,则会记录window
而不是对象a
。