变量提升的意义是什么?

What is the significance of variable hoisting?

我知道所有变量都被提升但赋值没有提升(不要介意这个问题的函数 - 这对我来说很有意义 - related SO)。

但我看不出这对代码有何影响。我写了一个fiddle来实验

如果提升变量并赋予它 undefined 的值有什么好处,这似乎是这种情况。

var a = 1;

function foo (proxy){
    print(proxy);
}

function print(out){
    document.getElementById("out").innerHTML = out;
}

// foo("you")

print(d); // undefined

var d = 4;

print(d); // 4

https://jsfiddle.net/6ue7052k/1/

这是它影响输出的一种方式:

function outer ( ) {

    var a = 'foo';

    function inner ( ) {
        console.log( a );
        var a = 'bar';
    }

    inner();

};

没有提升 outer() 会输出 'foo',但因为局部 var a 声明被提升,它输出 undefined。那个用处不大,但是说明能起到作用

写 JavaScript 时变量提升没有任何好处。通过在每个函数的开头声明所有变量(不分配给它们),它实现的任何事情都可以在没有它的情况下轻松完成。这只是一个实现细节。