【问题标题】:JavaScript, Hoisting between 'var' and without 'var' [duplicate]JavaScript,在“var”和没有“var”之间提升 [重复]
【发布时间】:2015-12-03 03:30:10
【问题描述】:

我了解以下功能,因为会发生变量提升。 foo();

function foo() {
    console.log( a ); // undefined
    var a = 2;
}

但是我不明白的是以下部分。 我得到了参考错误,为什么?

foo()
function foo() {
    console.log( a ); // Reference Error
    a = 2;
}

--- 编辑 ---
到目前为止,我从答案中了解到的是第二个没有进行任何提升,我们不能使用任何未定义的变量。

foo()
function foo() {
    //  we cannot use any undefined variable, which "a" here 
    console.log( a ); 
    window.a = 2;
}

例如

var a;
a; //undefined
b; //Reference error

【问题讨论】:

  • 由于没有var声明,所以不会被提升,并且在全局空间之后日志语句中定义,所以抛出错误
  • 您还能期待什么?
  • @Bergi undefined 也许
  • @Bergi 我不认为 so dupe 回答了与全局/本地范围有关的问题,这与提升有关。
  • @Tushar:你认为this 会是一个更好的骗子吗?

标签: javascript hoisting


【解决方案1】:

在第一个中,a 被声明,但undefined,在第二个中它也是未声明(在foo 或全局范围内找不到),所以抛出一个 ReferenceError。

【讨论】:

    猜你喜欢
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    • 2016-07-01
    • 2019-09-11
    • 2011-09-30
    相关资源
    最近更新 更多