当全局变量再次在块中本地声明并在块中的声明之前引用时,返回为未定义。
Global variable returned as undefined when it is again declared locally in a block and referred before the declaration in the block.
var a = 10;
function example(){
alert(a);
var a = 5;
}
example();
此代码提示未定义。
我的问题是为什么变量 a 是警报 "undefined" 而不是返回全局变量的值。
提前感谢大家。希望有人帮我解释一下。
因为变量 a
的 提升 。下面是正在发生的事情。函数内部的 a
被提升到函数体的顶部,它遮盖了函数外部的 a
并且值为 10
.
并且您在 a
初始化之前提醒它,在这种情况下,a
将具有默认值 undefined
。
var a = 10;
function example(){
var a; // this is undefined and shadows the global a
alert(a);
a = 5;
alert(a); // 5
}
example();
在 Javascript 函数中,每个变量的 声明 总是被提升到它的顶部,而不是它的 赋值价值。你真正执行的是:
var a = 10;
function example(){
var a; //undefined!
alert(a); //still undefined!
a = 5; //only now it becomes 5
}
example();
阅读 Javascript 中关于 hoisting
的更多信息:Javascript hoisting explained
为了避免声明新的局部变量,而只是使用已经定义的全局变量:
var a = 10;
function example(){
alert(a);
a = 5;
}
example();
这看起来就像您要在此处实现的目标。
发生这种情况是因为,如果您声明了同名的全局变量和局部变量,当您尝试在函数内部使用该变量时,局部变量将具有优先权 .话虽如此,由于您尝试警告 a
的值并且您在函数范围内定义了一个具有相同名称的局部变量,因此在警告中将出现局部变量的值。但是,您在 alert 语句之后声明变量。因此它的值是未定义的。
如果您尝试 运行 以下代码段,我们已在其中删除了另一个名为 a
的变量的声明,您将获得预期的行为。
var a = 10;
function example(){
alert(a);
a = 5;
}
example();
var a = 10;
function example(){
alert(a);
var a = 5;
}
example();
此代码提示未定义。
我的问题是为什么变量 a 是警报 "undefined" 而不是返回全局变量的值。
提前感谢大家。希望有人帮我解释一下。
因为变量 a
的 提升 。下面是正在发生的事情。函数内部的 a
被提升到函数体的顶部,它遮盖了函数外部的 a
并且值为 10
.
并且您在 a
初始化之前提醒它,在这种情况下,a
将具有默认值 undefined
。
var a = 10;
function example(){
var a; // this is undefined and shadows the global a
alert(a);
a = 5;
alert(a); // 5
}
example();
在 Javascript 函数中,每个变量的 声明 总是被提升到它的顶部,而不是它的 赋值价值。你真正执行的是:
var a = 10;
function example(){
var a; //undefined!
alert(a); //still undefined!
a = 5; //only now it becomes 5
}
example();
阅读 Javascript 中关于 hoisting
的更多信息:Javascript hoisting explained
为了避免声明新的局部变量,而只是使用已经定义的全局变量:
var a = 10;
function example(){
alert(a);
a = 5;
}
example();
这看起来就像您要在此处实现的目标。
发生这种情况是因为,如果您声明了同名的全局变量和局部变量,当您尝试在函数内部使用该变量时,局部变量将具有优先权 .话虽如此,由于您尝试警告 a
的值并且您在函数范围内定义了一个具有相同名称的局部变量,因此在警告中将出现局部变量的值。但是,您在 alert 语句之后声明变量。因此它的值是未定义的。
如果您尝试 运行 以下代码段,我们已在其中删除了另一个名为 a
的变量的声明,您将获得预期的行为。
var a = 10;
function example(){
alert(a);
a = 5;
}
example();