我有疑问,关于JavaScript的范围:-
var a = 10;
function show() {
alert(a);
var a = 20;
alert(a);
}
show();
alert(a);
上面给出的输出为“未定义”20 10
我理解了最后两个输出,但是为什么在第一个警报中没有定义,我将结果解释为10,20,10,因为它是一个脚本,它会逐行运行,所以当第一个警报遇到时,它会处理全局的,用10警告我,但是所有这些理论都出错了。
请你解释一下,实际的理论是什么,我哪里出错了?
谢谢
发布于 2013-11-12 12:53:51
吊装:一个分散的vars问题
JavaScript使您可以在一个函数中的任何地方拥有多个var语句,它们的作用都好像变量都是在函数的顶部声明的。这种行为被称为提升。当您使用一个变量,然后在函数中进一步声明它时,这会导致逻辑错误。对于JavaScript,只要变量位于相同的作用域(相同的函数),它就被认为是声明的,即使在var声明之前使用它时也是如此。看一下这个例子:
myname = "global"; // global variable
function func() {
alert(myname); // "undefined"
var myname = "local";
alert(myname); // "local"
}
func();
在本例中,您可能期望第一个警报()将提示“全局”,第二个提示将提示“本地”。这是一个合理的期望,因为在发出第一次警报时,我的名称没有声明,因此函数可能会“查看”全局myname。但这不是它的工作方式。第一个警报会说“未定义”,因为我的名字被视为函数的局部变量。(尽管声明是在之后发布的。)所有变量声明都被悬挂到函数的顶部。因此,为了避免这种混淆,最好提前声明您打算使用的所有变量。
前面的代码段将表现得好像它是这样实现的:
myname = "global"; // global variable
function func() {
var myname; // same as -> var myname = undefined;
alert(myname); // "undefined"
myname = "local";
alert(myname); // "local"
}
func();
发布于 2013-11-12 12:53:21
查找变量提升,变量定义得到提升初始化不。
https://stackoverflow.com/questions/19929461
复制相似问题