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 |
在第一个测试中,
函数声明
应用了吊装,您的代码相当于
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 |
因为提升会在您尝试为其赋值之前创建一个掩盖全局变量的局部变量
第一个示例(通过JavaScript)解释为:
1 2 3 4 5 6 | var a = 1; function b() { var a = function () {}; a = 10; return; } |
在JavaScript中,所有局部变量(在本例中是将保存函数的局部变量a)都在函数的顶部声明。
局部变量a设置为10而不是全局变量。然后它在返回后不再存在。
在第一次测试中,您创建一个存储在局部变量
1 2 3 4 5 | function b() { a = 10; return; function a() {} // can be called using a() inside this function } |
所以你可以在你的函数
1 2 3 4 5 6 | function b() { a(); // alerts"hi" a = 10; return; function a() { alert("hi"); } } |
现在,您在局部变量中存储数字10而不是函数。全局变量保持不变,因此您的外部警报仍显示1。