什么是词法环境(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