Yas*_*rit 2 javascript scope global-variables
我有问题,与JavaScript范围有关: -
var a = 10;
function show() {
alert(a);
var a = 20;
alert(a);
}
show();
alert(a);
Run Code Online (Sandbox Code Playgroud)
上面给出的输出为"未定义"20 10
我理解了最后两个输出,但为什么在第一个警报中未定义,我将结果解释为10,20,10,因为它是一个脚本,它将逐行运行,所以当第一个警报将遇到它将处理全局并提醒我10但所有这些理论都出错了.
能否请您解释一下,我的实际理论是什么,我哪里错了
谢谢
小智 6
吊装:分散的变量问题
JavaScript允许您在函数中的任何位置具有多个var语句,并且它们都像在函数顶部声明变量一样.此行为称为提升.当您使用变量然后在函数中进一步声明它时,这可能导致逻辑错误.对于JavaScript,只要变量在同一范围内(相同的函数),即使在var声明之前使用它,也会被认为是声明的.看看这个例子:
myname = "global"; // global variable
function func() {
alert(myname); // "undefined"
var myname = "local";
alert(myname); // "local"
}
func();
Run Code Online (Sandbox Code Playgroud)
在这个例子中,您可能期望第一个alert()将提示"global"而第二个将提示"local".这是一个合理的期望,因为在第一个警报时,myname未被声明,因此函数应该可能"看到"全球myname.但这不是它的工作原理.第一个警报将显示"undefined",因为myname被视为声明为函数的局部变量.(虽然声明在后面.)所有变量声明都被提升到函数的顶部.因此,为避免这种混淆,最好先声明要使用的所有变量.
前面的代码片段的行为就好像它是这样实现的:
myname = "global"; // global variable
function func() {
var myname; // same as -> var myname = undefined;
alert(myname); // "undefined"
myname = "local";
alert(myname); // "local"
}
func();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2092 次 |
| 最近记录: |