【发布时间】:2018-05-26 03:48:02
【问题描述】:
我正在学习词汇 this 被传递,我的理解是一个胖箭头从它自己或它上面的函数中获取它的“this”。如果这是一个常规函数,我的理解是它不会从高于此的函数中获得this。例如,这是我认为不应该运行的代码:
function test() {
this.a = 5; // test()' variable
this.b = function() {
//this is a fat arrow function so console log below could grab the this from this function's space, but not higher than this, but it does?
this.c = setTimeout(() => {
console.log(this.a);
}, 1000);
}
}
var d = new test();
d.b();
所以我希望 console.log 语句想要打印出 this.a 。它在胖箭头函数上下文中不存在,因此它上升到匿名函数级别。这里也没有this.a。这是一个常规的非胖箭头函数,这意味着我理解的词汇范围应该停在这里,它不应该再上升,但确实如此,我不知道为什么。为什么会这样?
【问题讨论】:
-
var d = new test();是我相信的根执行上下文。词法作用域查找最终找到变量a -
b 函数是测试的一部分/附加到测试,它们具有相同的 this 指针。
标签: javascript ecmascript-6 arrow-functions