【译】词汇环境的介绍

72 阅读2分钟

词汇环境。闭包前必读

在JavaScript中,你一定多次听说过词汇环境 这个词。

那么什么是词法环境呢?

"词汇环境 " 基本上是一个规范对象,它存储了标识符与函数和变量的关联。

每个变量、函数和代码块都有自己的_词汇环境_。

考虑到词汇环境分为两部分
:1.环境存储了所有的局部变量和值。
2.2.引用。对创建它的外部环境的引用。

让我们进一步研究它们对变量和函数的更多细节。

案例A:变量

在下面的图片中,注释解释了_词法环境。_

变量的词法环境例子

  • 当脚本开始运行时,全局的_词法环境_已经预先填充了里面声明的变量,但是所有的变量都没有被初始化,而且所有变量对外部环境的引用都是空的。
  • 当运行到let newVariable这一行时,我们可以用这个变量来初始化它,因为它现在是未定义的。
  • 现在我们将newVariable = "Hello";并且词汇_环境也被_ 更新。
  • 然后,我们改变newVariable = "Hello "的值;词汇_环境_ 再次被更新。

案例B:函数

函数在其声明之前就可以使用了,因为它们在脚本运行时立即被初始化。

变量和函数的词法环境示例 和函数

当一个函数运行时,会创建一个_词汇环境_ 来存储它的局部变量和它们的值以及对创建它的外部环境的_引用_。

函数首先在其内部的词法环境中搜索变量,如果没有找到,就转移到外部的环境中,以此类推,直到全局的环境。

输出。 2 苹果

在这里,函数eat在其_词法环境_中拥有变量fruit,但是在其_词法环境_中没有找到count,所以它利用外部_词法环境_的_引用_来搜索count,并最终找到它。因此,输出结果是2个苹果。

注意:在函数表达式的语法中,函数不会被立即初始化,直到脚本__为其__输入 "let"关键字_时才能_使用_。_
let eat = function(fruit){console.log(`Eat ${fruit}!`);
}


Lexical Environment最初发表于Nerd For Techon Medium,在那里人们通过强调和回应这个故事来继续对话。