提升:分散变量的问题
JavaScript 使您可以在函数中的任何位置拥有多个 var 语句,它们的行为就像变量是在函数顶部声明的一样。这种行为称为提升。当您使用变量然后在函数中进一步声明它时,这可能会导致逻辑错误。对于 JavaScript,只要一个变量在同一个范围内(同一个函数),它就被认为是声明的,即使它在 var 声明之前使用。看看这个例子:
myname = "global"; // global variable
function func() {
alert(myname); // "undefined"
var myname = "local";
alert(myname); // "local"
}
func();
在此示例中,您可能期望第一个 alert() 将提示“global”,第二个将提示“local”。这是一个合理的预期,因为在第一次警报时,未声明 myname,因此该函数可能应该“看到”全局 myname。但这不是它的工作原理。第一个警报将显示“未定义”,因为 myname 被认为是函数的局部变量。(尽管声明在后面。)所有变量声明都被提升到函数的顶部。因此,为了避免这种类型的混淆,最好预先声明您打算使用的所有变量。
前面的代码片段的行为就好像它是这样实现的:
myname = "global"; // global variable
function func() {
var myname; // same as -> var myname = undefined;
alert(myname); // "undefined"
myname = "local";
alert(myname); // "local"
}
func();