不必要的吊装正在发生。为什么?

时间:2014-07-06 19:17:08

标签: javascript

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;在内部分配任何内存,那么这不是一个优化的权利..?

1 个答案:

答案 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();

因为在执行任何其他代码之前处理声明。