如何理解javascript中的全局变量和局部变量

How to understand global and local variable in javascript

本问题已经有最佳答案,请猛点这里访问。

第一次测试:

1
2
3
4
5
6
7
8
var a = 1;
function b() {
    a = 10;
    return;
    function a() {}
}
b();
alert(a);    // 1

第二次测试:

1
2
3
4
5
6
7
var a = 1;
function b() {
    a = 10;
    return;
}
b();
alert(a);    // 10

在第一个测试中,a等于1,尽管我在方法中将其设置为10。 在第二个测试中,我将其设置为10,当我输出它时将其设置为10 ..这是如何工作的?


函数声明function a() {}b函数的本地范围内声明变量名a(并为其分配函数)。分配给a时,您将分配给该局部变量而不是全局变量。

应用了吊装,您的代码相当于

1
2
3
4
5
6
7
8
var b = function b() {
    var a = function a() {};
    a = 10;
    return;
}
var a = 1;
b();
alert(a);    // 1, obvious now

因为提升会在您尝试为其赋值之前创建一个掩盖全局变量的局部变量a


第一个示例(通过JavaScript)解释为:

1
2
3
4
5
6
var a = 1;
function b() {
  var a = function () {};
  a = 10;
  return;
}

在JavaScript中,所有局部变量(在本例中是将保存函数的局部变量a)都在函数的顶部声明。

局部变量a设置为10而不是全局变量。然后它在返回后不再存在。


在第一次测试中,您创建一个存储在局部变量a中的函数:

1
2
3
4
5
function b() {
    a = 10;
    return;
    function a() {} // can be called using a() inside this function
}

所以你可以在你的函数b()中使用a()来调用这个函数。尝试:

1
2
3
4
5
6
function b() {
    a(); // alerts"hi"
    a = 10;
    return;
    function a() { alert("hi"); }
}

现在,您在局部变量中存储数字10而不是函数。全局变量保持不变,因此您的外部警报仍显示1。