什么是词法环境(lexical scope)

 定义:lexical scope又称作static scope,相对于dynamic scope。出处  外文链接

个人认为把scope理解为环境更好理解

什么是dynamic scope呢?看下面的案例

function foo() {
  console.log(this.a)
}
const o = {
  a: 10,
  fn: foo
}
o.fn()  // 10
const obj = {
  a: 20,
  fn: foo
}
obj.fn()  // 20

o和obj两个对象分别调用fn函数返回的结果分别是10和20,fn函数没有改变但是返回的结果却不同,这是因为fn函数外部的环境不一样

我们再来看看static scope,案例如下:

function foo() {
  const o = {
    a: 30,
    fn: function() {
    console.log(this.a)
    }
  }
  o.fn()
}
const _object = {
  a: 40,
  foo: foo
}
foo() // 30
_object.foo()  // 30

foo和_object.foo返回的值是一样的,并没有因为外部的环境改变了而导致结果不一样,可以理解为红色标记的内联函数(匿名函数)构建了封闭的static scope

原文地址:https://www.cnblogs.com/re-doc/p/14085827.html