[我在这里经历了主要的大脑冻结,了解箭头的功能和词法范围:前一段时间我通读了凯尔·辛普森(Kyle Simpson)的所有文章《你不懂JS》,我以为我对范围和上下文非常了解。但是我只是不了解箭头函数的词法作用域如何应用于对象-我一直在React中使用类,并且始终很清楚,箭头函数绑定到的this
是类。
例如,在此示例中(来自https://medium.com/tfogo/advantages-and-pitfalls-of-arrow-functions-a16f0835799e)
let obj = {
myVar: 'foo',
myFunc: function() {
console.log(this.myVar)
setTimeout(() => {
console.log(this.myVar)
}, 1000)
}
}
箭头功能应正确绑定this
,避免执行bind
。但这是从词汇范围出发的吗?凭什么?因为下一个作用域是函数myFunc
的作用域,而该函数的词法父作用域是obj
?
但是他们给了这个例子
let obj = {
myVar: 'foo',
myFunc: () => {
console.log(this.myVar)
}
}
obj.myFunc() // undefined
未正确绑定this
的情况。这是因为箭头功能周围没有功能,所以下一个词汇范围是全局上下文吗?
总而言之:这里的“词法范围”是否确实是由函数定义的相同词法范围,并且带有箭头功能的this
只是在寻找下一个包含函数的父级?
[我保证你我早就了解了(或者以为我知道了),但是我猜想是“使用它还是失去它”,-
但是这是从词汇范围来的吗?在什么意义上?
箭头函数与所有其他函数具有相同的词法作用域规则,除非涉及this
。定义箭头功能时,它会在定义时捕获this
现在的内容,并永久使用它。箭头函数中thisin the lexical context of the arrow function's definition is the permanent value of
this`中可用的值。
首先要记住箭头功能的定义