函数式编程——Javascript curry:返回函数中的上下文

functional programming - Javascript curry: context in returned function

本文关键字:函数 上下文 返回 curry 编程 Javascript      更新时间:2023-09-26

在curry函数中:

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.applythisnull是否有差异?我看不出有什么不同。


编辑:

感谢这个答案,我认为现在很清楚了,这里是我做的一个小例子来理解它:

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...

传递null使上下文成为全局上下文(浏览器中的window)。

来自MDN:

如果方法是非严格模式代码中的函数,则为null和Undefined将被替换为全局对象和原语值将被框起来。

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

请看下面的代码:

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

如果您通过null来应用,它将记录window而不是对象a