JavaScript,'var'和没有'var'之间的提升

时间:2015-12-03 03:30:11

标签: javascript hoisting

我理解以下功能,因为发生了变量提升。 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

1 个答案:

答案 0 :(得分:0)

在第一个中,a被声明,但是undefined,在第二个中它也是未声明的(在foo中无法找到在全局范围内),因此抛出一个ReferenceError。