【发布时间】:2019-10-23 14:34:05
【问题描述】:
我在理解箭头函数和词法作用域时遇到了严重的大脑冻结:前段时间我通读了 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 只是为了寻找下一个包含函数的父函数?
我向你保证,我不久前就理解了这一点(或认为我理解了),但我猜是“使用它或失去它”——
【问题讨论】:
标签: javascript scope arrow-functions