【问题标题】:What is the significance of variable hoisting?变量吊装的意义是什么?
【发布时间】:2016-05-03 21:14:42
【问题描述】:

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

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

如果你提升变量并赋予它 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/

【问题讨论】:

  • 去掉d之前的var,第一次调用print会抛出异常。
  • 为什么这个问题被重新打开了?这是Why does JavaScript hoist variables?的明显复制品
  • @squint 对我来说,这似乎并不是一个完整的副本。为什么要提升它们与它如何影响代码是不同的问题。
  • @Paulpro:我认为他的意思一定是哲学上的,因为他知道undefined 的运行时效果。
  • @arc:我的看法,但我会说它不仅没有好处,而且实际上它不利于直观地理解正在发生的事情。链接的答案似乎解释了它是如何产生的,并且它只是解释器如何工作的副作用(这就是我将其标记为重复的原因)

标签: javascript hoisting


【解决方案1】:

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

function outer ( ) {

    var a = 'foo';

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

    inner();

};

如果不提升outer() 将输出'foo',但由于提升了本地var a 声明,它会输出undefined。这不是很有用,但它表明它可以产生效果。

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

【讨论】:

    猜你喜欢
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 2011-08-30
    • 2020-10-29
    • 2014-01-27
    • 1970-01-01
    • 2012-03-05
    相关资源
    最近更新 更多