JavaScript引擎如何读取和执行具有冲突全局和局部变量的函数

How do JavaScript engines read and execute functions with a conflicting global and local variable?

本文关键字:冲突 全局 局部变量 函数 执行 JavaScript 何读取 读取 引擎      更新时间:2023-09-26

我需要了解浏览器中的JavaScript引擎是如何读取函数的。考虑以下代码:

var g = 5;
alert(g); //alerts 5
function haha() {
    alert(g); // alerts NOTHING. Why is this? Why not alert 5? var g = 45 hasn't yet occurred
    var g = 45;
    alert(g); // alerts 45
};
haha();
alert(g); // alerts 5. Because g = 45 is a local variable.

Fiddle

您在haha功能中看到的alert(g)警告undefined的效果来自可变吊装。

haha功能实际执行为:

function haha() {
    var g;
    alert(g);
    g = 45;
    alert(g);
}

这是因为变量和函数定义在JavaScript中被提升到其作用域的顶部。

这种影响可能会导致一些相当不直观的行为,比如你所看到的。简单的解决方案是始终在执行任何代码之前声明变量和函数,以便编写的代码与正在执行的代码相匹配。