如何理解javascript中的全局变量和局部变量
第一次测试:如何理解javascript中的全局变量和局部变量,javascript,Javascript,第一次测试: 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。。这是如
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
。。这是如何工作的?因为提升会创建一个局部变量a
,在您尝试为其赋值之前,它会屏蔽全局变量。在第一次测试中,您创建了一个存储在局部变量a
中的函数:
function b() {
a = 10;
return;
function a() {} // can be called using a() inside this function
}
因此,您可以在函数b()
中使用a()
调用此函数。尝试:
function b() {
a(); // alerts "hi"
a = 10;
return;
function a() { alert("hi"); }
}
现在,将数字10而不是函数存储在局部变量a中。全局变量保持不变,因此您的外部警报仍然显示1。函数声明
函数a(){}
在b
函数的局部范围内声明变量名a
(并为其分配函数)。分配给a
时,将分配给该局部变量,而不是全局变量
应用提升后,您的代码相当于
var b = function b() {
var a = function a() {};
a = 10;
return;
}
var a = 1;
b();
alert(a); // 1, obvious now
第一个示例(通过JavaScript)解释为: 在JavaScript中,所有局部变量(在本例中是保存函数的局部变量a)都在函数顶部声明
局部变量a被设置为10,而不是全局变量。返回后它就不再存在了。我明白了。相当棘手。感谢您的快速回复。此处提供了此示例及其说明:
var a = 1;
function b() {
var a = function () {};
a = 10;
return;
}