首页 > 解决方案 > 箭头回调函数中的 this 绑定

问题描述

我将感谢您的帮助和解释。我不清楚为什么下面代码中的第二个和第三个警报与第一个不同的原因。

箭头函数具有词法绑定。这一点很清楚。为什么在对象方法调用中包含箭头函数表达式作为参数会对“this”产生影响,它以某种方式绑定到全局名称变量。

var name = "globalscope name";

let person = {
    name: 'Tommy',
   
    showName(a){
        let fun1 = ()=>this.name;
        let fun2 = a;
        alert(fun1()); //Tommy - this is behaving as expected base on lexical binding
        alert(a()); // globalscope name - this is not
        alert(fun2()); //globalscope name
    }
}

person.showName(()=>this.name);

标签: javascriptcallbackarrow-functions

解决方案


词法绑定this意味着this从声明函数的地方复制值。

最后一行声明的函数位于 is 的范围thiswindow

第一行声明的函数位于取决于如何调用showName的范围内。thisshowName


this值是从声明函数的范围复制的,而不是从它在传递给调用它的函数之前的值。


推荐阅读