function test() {
a = 10;
alert(a);
if (false) {
var a;
}
}
test();
Run Code Online (Sandbox Code Playgroud)
从上面的代码中,您可以看到我在falsy if语句中声明了一个变量,这意味着它内部的代码不会被执行.看,现在变量是不必要的悬挂,为什么会这样......?它会不必要地分配内存.是不是编译器足够聪明地识别它..?或者这些变量是否会像垃圾一样收集垃圾.
给定的代码块将被解释为,
function test() {
var a;
a = 10;
alert(a);
if (false) {
}
}
test();
Run Code Online (Sandbox Code Playgroud)
逻辑上,从变量语句中提取变量的用途是什么?如果在var a;内部分配任何内存,那么这不是一个优化的权利..?
Mozilla的例子更多地讨论了变量提升
你会注意到的
function test() {
a = 10;
alert("Function a=" + a);
if (false) {
var a;
}
}
test();
alert("Global a=" + a);
Run Code Online (Sandbox Code Playgroud)
给出了"全局"行中没有定义的错误,因为作用域,你不会继续
function test() {
a = 10;
alert("Function a=" + a);
}
test();
alert("Global a=" + a);
Run Code Online (Sandbox Code Playgroud)
因此,根据文档中的说明,您的代码等于:
function test() {
var a;
a = 10;
alert(a);
if (false) {
}
}
test();
Run Code Online (Sandbox Code Playgroud)
因为在执行任何其他代码之前处理声明.