《你不知道的JavaScript(上卷)》笔记:箭头函数的this

箭头函数根据外层(函数或者全局)作用域来决定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

猜你喜欢

转载自blog.csdn.net/wuweitiandian/article/details/79517054