javascript - 箭头回调函数中的 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);
解决方案
词法绑定this
意味着this
从声明函数的地方复制值。
最后一行声明的函数位于 is 的范围this
内window
。
第一行声明的函数位于取决于如何调用showName
的范围内。this
showName
该this
值是从声明函数的范围复制的,而不是从它在传递给调用它的函数之前的值。
推荐阅读
- java - Spring Boot MVC 在另一个 JSP 文件中包含 JSP 文件
- ajax - Laravel 5.7 Ajax 发布请求返回 419 状态码
- django - 如何在 django 项目中使用 react-router 处理 404 错误
- linux - 错误:ld.so:无法预加载来自 LD_PRELOAD 的对象“libgtk3-nocsd.so.0”
- javascript - 检查数组是否与另一个数组匹配以返回不匹配的内容
- excel - 如何遍历一列并只挑选出唯一的整数?
- recursion - 解决递归的替代方法
- java - 如何为这个 JAVA 项目构建我的 Tester 类?
- android - 在 Android 上显示 HTML 页面
- editor - MWeb 发布到 Evernote 失败,“Error Domain=com.evernote.sdk Code=11”