JavaScript变量提升机制解析:为何局部变量导致undefined
作者:拾光时间:2026-10-26 14:30:26浏览:198
本文通过对比两段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 专家对此现象进行解答
作者最新文章
JS处理含Emoji或中文的字符串转数组乱码问题
2026-11-05 16:12:28
JS怎么使用展开运算符合并对象
2026-11-05 14:42:18
ES6+环境下判断JS对象为空的简洁写法
2026-11-05 12:12:23
怎么通过replacer函数自定义JS中JSON的格式化输出
2026-11-05 11:19:44
JS正则表达式基础:字面量与RegExp构造函数的区别及常用元字符
2026-11-05 11:16:58
