在 JavaScript 中提升是如何实现的?

ami*_*_39 5 javascript

如果JavaScript是一种解释性语言,它如何执行提升。不解释型语言从上到下逐行执行代码。是否有任何类型的编译在后台工作?

dec*_*eze 5

“已解释”并不意味着每行在读取时立即执行。Javascript 解释器首先读取整个文件,在此过程中它将信息解析为可执行代码。提升发生在这里:在解析执行之间。


简而言之,非常简化,提升的工作方式如下:

  • 解析器/解释器将源代码读入中间表示
  • 一些关键字引入了新的作用域(例如function),将为其创建一个新的“作用域对象”*
  • 如果在解析作用域期间解析器遇到var关键字(或其他相关关键字),它会在当前作用域上创建该符号名称(没有 value/ undefined

* 在这里不要过多地解读“对象”这个词,我们谈论的不是 Javascript,而是 Javascript 正在被编译成的中间语言。

因此,在此过程之后,您将获得源代码的一些中间表示,其中定义了范围并在其上保留了本地符号名称。这就是在实际执行任何代码之前将变量名称提升到“顶部”的方式。