JavaScript 绑定、应用和 `this` 指针
JavaScript Bind, Apply, and the `this` pointer
我对 JS bind
、apply
和 this
有点困惑。
问题
- 为什么
this
和 null
在以下代码段中可以互换?
- 以下上下文中的
this
是否指向 window
?
function curry(fn) {
// your code here
return function curryInner(...args) {
if (args.length >= fn.length) return fn.apply(this, args);
return curryInner.bind(this, ...args); //change this to null, still pass the test
};
}
const join = (a, b, c) => {
return `${a}_${b}_${c}`
}
const curriedJoin = curry(join)
console.log(curriedJoin(1, 2, 3)) // '1_2_3'
不,this
指向它所在函数的 this
上下文。
在这种情况下,你放在那里真的无关紧要,因为调用 bind
的唯一目的是创建一个已经设置了 args 的函数副本。
return curryInner.bind(null, ...args)
基本上可以替换为
return function() {
return curryInner(args);
}
我对 JS bind
、apply
和 this
有点困惑。
问题
- 为什么
this
和null
在以下代码段中可以互换? - 以下上下文中的
this
是否指向window
?
function curry(fn) {
// your code here
return function curryInner(...args) {
if (args.length >= fn.length) return fn.apply(this, args);
return curryInner.bind(this, ...args); //change this to null, still pass the test
};
}
const join = (a, b, c) => {
return `${a}_${b}_${c}`
}
const curriedJoin = curry(join)
console.log(curriedJoin(1, 2, 3)) // '1_2_3'
不,this
指向它所在函数的 this
上下文。
在这种情况下,你放在那里真的无关紧要,因为调用 bind
的唯一目的是创建一个已经设置了 args 的函数副本。
return curryInner.bind(null, ...args)
基本上可以替换为
return function() {
return curryInner(args);
}