Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript curry:返回函数中的上下文_Javascript_Functional Programming_Closures - Fatal编程技术网

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
的概念,但我不知道它在该函数中有什么意义请参见。