对象方法(Javascript)内部的词法范围绑定的机制是什么?

问题描述 投票:0回答:3

[我在这里经历了主要的大脑冻结,了解箭头的功能和词法范围:前一段时间我通读了凯尔·辛普森(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
3个回答
1
投票

但是这是从词汇范围来的吗?在什么意义上?


1
投票

箭头函数与所有其他函数具有相同的词法作用域规则,除非涉及this。定义箭头功能时,它会在定义时捕获this现在的内容,并永久使用它。箭头函数中thisin the lexical context of the arrow function's definition is the permanent value ofthis`中可用的值。


1
投票

首先要记住箭头功能的定义

© www.soinside.com 2019 - 2024. All rights reserved.