函数式编程——Javascript curry:返回函数中的上下文
functional programming - Javascript curry: context in returned function
在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.apply
中this
和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_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
。
相关文章:
- 将函数的上下文应用于javascript变量
- 是否可以在不更改上下文的情况下调用函数.apply
- 调用$.each()函数时上下文发生变化
- 如何向onClick事件处理程序传递一个接受参数的函数,并且仍然将该函数绑定到组件's”;这个“;上下文
- 访问函数对象的上下文属性|如何
- 构造函数函数中的自执行函数的OO上下文/范围
- node.js中的箭头函数上下文
- Javascript Ninja:数组中的当前元素作为函数上下文
- underscore.js debounce函数中的内部函数上下文
- 离开函数上下文后,Javascript数组内容将消失
- Javascript函数上下文
- & # 39; functionInBackboneView& # 39;在Jquery中不是一个函数上下文
- 如何构造原型,使函数上下文不指向“原型”对象?
- 将变量传递给函数上下文
- 点击释放函数上下文
- 在JavaScript中更改函数上下文(用于访问局部变量)
- Javascript:使用函数上下文与作为参数传递的好处是什么?
- 嵌套函数中的函数上下文(“this”)
- 事件类型字段的打字稿事件处理程序函数 - 上下文不正确
- JavaScript函数上下文错误