JavaScript变量提升机制解析:为何局部变量导致undefined

作者:拾光

时间:2026-10-26

浏览:197

本文通过对比两段JavaScript代码,深入解析变量提升(Hoisting)机制。当局部变量与全局变量同名时,即使赋值语句在console.log之后,局部变量的声明也会被提前至函数顶部,导致首次输出为undefined而非全局变量值。

文章目录

JavaScript变量提升机制解析:为何局部变量导致undefined

首先展示以下三段代码示例


具体代码如下所示:

 
var firstName = "Mark";
(function DisplayFirstName() {
console.log(firstName);
})();//此处必然输出 Mark
var lastName = "Aut";
(function DisplayLastName() {
var lastName = "Bru";
console.log(lastName);
})();//此处必然输出 Bru,因为本地作用域的优先级高于全局作用域
//那么接下来这段代码的结果是什么呢?
var lastName = "Aut";
(function DisplayLastName() {
console.log(lastName);
var lastName = "Bru";
console.log(lastName);
})();//大家能猜出最终输出结果吗?

该段代码的实际输出结果为:


LOG: undefined


LOG: Bru



这一结果出乎我的意料,原本预期输出应为 "Aut" 和 "Bru"


我之前的理解是:在程序首次输出 lastName 时,由于未找到本地声明的 lastName 变量,因此使用了全局的 lastName 定义;第二次输出时才使用本地变量的值


(基于我的认知,JavaScript 作为解释型语言,是一句一句顺序执行的)



看到这个结果后,看来 JavaScript 的执行过程并非完全是顺序进行的


根据目前的推测,JavaScript 的执行机制可能是先进行语法分析,并在此过程中完成变量表(包含本地和全局变量)的构建


随后才开始按顺序逐行执行脚本代码


恳请各位 JavaScript 专家对此现象进行解答

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章