function test() {
a = 10;
alert(a);
if (false) {
var a;
}
}
test();
从上面的代码中,您可以看到我在falsy if语句中声明了一个变量,这意味着其中的代码不会被执行。看,现在变量是不必要的悬挂,为什么会这样......?它会不必要地分配内存。难道编译器不够聪明才能识别它吗?或者这些变量是否会像垃圾一样被收集。?
给定的代码块将被解释为,
function test() {
var a;
a = 10;
alert(a);
if (false) {
}
}
test();
从逻辑上讲,使用从变量语句中提升变量是什么用途。如果var a;
在内部分配任何内存,那么这不是一个优化的权利..?
答案 0 :(得分:5)
Mozilla's example更多地谈论变量提升
您会注意到
function test() {
a = 10;
alert("Function a=" + a);
if (false) {
var a;
}
}
test();
alert("Global a=" + a);
给出了未定义的" Global"由于范围界定,你不会上路
function test() {
a = 10;
alert("Function a=" + a);
}
test();
alert("Global a=" + a);
因此,根据文档中的说明,您的代码等于:
function test() {
var a;
a = 10;
alert(a);
if (false) {
}
}
test();
因为在执行任何其他代码之前处理声明。