Javascript curry:返回函数中的上下文
在这样的咖喱函数中:Javascript curry:返回函数中的上下文,javascript,functional-programming,closures,Javascript,Functional Programming,Closures,在这样的咖喱函数中: 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))); }; }; 在fn.appl
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)));
};
};
在fn.apply
中,此与null
之间是否有任何区别?我看不出这有什么不同
编辑:
多亏了我认为现在已经很清楚了,这里有一个我用来理解它的小例子:
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\u时,此
返回fn.apply(此,…
和curry\u null
返回fn.apply(null…
传递null
以应用使上下文成为全局上下文(浏览器中的窗口
)
发件人:
如果方法是非严格模式代码中的函数,则null和
未定义的对象将替换为全局对象和基元
值将被装箱
这将如何影响结果取决于fn
函数(curry
的第一个参数)以及如何调用它
请参阅此代码:
var a = {curried: curry(function(){console.log(this)})};
a.curried();
如果传递
null
以应用,它将记录window
而不是对象a
传递null
以应用将使上下文成为全局上下文(浏览器中的window
)
发件人:
如果方法是非严格模式代码中的函数,则null和
未定义的对象将替换为全局对象和基元
值将被装箱
这将如何影响结果取决于fn
函数(curry的第一个参数)以及如何调用它
请参阅此代码:
var a = {curried: curry(function(){console.log(this)})};
a.curried();
如果您将
null
传递给apply,它将记录窗口而不是对象a
是的,它确定此
在函数内部代表什么。您也可以将任意对象放在那里。了解有关此
的更多信息:。我理解此
的概念,但我不知道它是如何实现的d在此函数中很重要请参见。是的,它确定函数内部的this
代表什么。您也可以将任意对象放在那里。了解有关this
的更多信息:。我理解this
的概念,但我不知道它在该函数中有什么意义请参见。