第一次测试:
var a = 1;
function b() {
a = 10;
return;
function a() {}
}
b();
alert(a); // 1
第二次测试:
var a = 1;
function b() {
a = 10;
return;
}
b();
alert(a); // 10
在第一个测试中,a
等于1
,尽管我在方法中将它设置为10
。在第二个测试中,我将其设置为10
,并在输出它时设置为10
。这是怎么回事?
发布于 2013-08-01 02:39:38
函数声明function a() {}
在b
函数的本地作用域中声明变量名称a
(并为其分配函数)。当您将赋值给a
时,您将将该局部变量分配给该局部变量,而不是全局变量。
在应用提升时,您的代码相当于
var b = function b() {
var a = function a() {};
a = 10;
return;
}
var a = 1;
b();
alert(a); // 1, obvious now
发布于 2013-08-01 02:28:39
因为提升创建了一个局部变量a
,它在尝试为全局变量赋值之前隐藏全局变量。
发布于 2013-08-01 02:33:37
在第一个测试中,创建一个存储在本地变量a
中的函数。
function b() {
a = 10;
return;
function a() {} // can be called using a() inside this function
}
因此,您可以在函数a()
中使用b()
调用该函数。尝试:
function b() {
a(); // alerts "hi"
a = 10;
return;
function a() { alert("hi"); }
}
现在,在局部变量a中存储数字10,而不是函数。全局变量保持不变,因此外部警报仍然显示1。
https://stackoverflow.com/questions/17991422
复制相似问题