箭头函数根据外层(函数或者全局)作用域来决定this。
function foo() {
// 返回一个箭头函数
return (a) => {
// this继承自foo()
console.log(this.a);
}
}
var obj1 = {
a: 2
}
var obj2 = {
a: 3
}
var bar = foo.call(obj1);
bar.call(obj2); // 2; 不是 3
foo()内部创建的箭头函数会捕获调用时foo()的this。
由于foo()的this绑定到obj1,bar的this也会绑定到obj1,箭头函数的绑定无法被修改。(new也不行)。
箭头函数最常用于毁掉函数中,例如事件处理器或者定时器。
function foo() {
setTimeout(() => {
// 这里的this在词法上继承自 foo()
console.log( this.a )
}, 100);
}
var obj = {
a: 2
}
foo.call(obj); // 2