前端面试必会 | 一文读懂现代 JavaScript 中的变量提升 - let、const 和 va
本文翻译自 https://blog.bitsrc.io/hoisting-in-modern-javascript-let-const-and-var-b290405adfda ,作者 Sukhjinder Arora,内容有部分删改,标题有改动。 许多 JavaScript 程序员将提升解释为 JavaScript 将声明(变量和函数)移至其当前作用域(函数或全局)顶部的行为。好像它们实际上已经移到了代码的顶部,事实并非如此。例如: console.log(a); var a = 'Hello World!'; 他们会说,上面的代码将在提升后转换为以下代码: var a; console.log(a); a = 'Hello World!'; 尽管看起来是这样,因为代码也工作正常了,但是 JavaScript 引擎事实上并不是这么做的,你的代码还是在这里。 那么,提升是什么呢? 在编译阶段,即在代码执行前的几微秒内,将对其进行扫描以查找函数和变量声明。所有这些函数和变量声明都添加到内存中称为 词法环境 的 JavaScript 数据结构内部。这样,即使在源代码中实际声明它们之前也可以使用它们。 词法环境是什么? 词法环境是用来保存标识符和变量映射关系的地方。标识符是变量或者函数的名字,变量是对实际对象(包括函数对象和数组对象)或者原始值的引用。 简而言之,