2

我在一次采访中得到了这个问题,我很好奇为什么这两个输出不同的东西:

(function() {
    console.log(bar);
    console.log(baz);
    foo();

    function foo() {
        console.log('aloha');
    }

    var bar = 2;
    baz = 3;
})();

输出:

undefined
Uncaught ReferenceError: baz is not defined 

然而:

(function() {
    console.log(bar);
    console.log(window.baz);
    foo();

    function foo() {
        console.log('aloha');
    }

    var bar = 2;
    baz = 3;
})();

输出:

undefined
undefined
'aloha'

baz引用方式和window.baz引用方式有什么区别?我虽然全局变量自动附加到窗口?

4

3 回答 3

1

ReferenceError 表示检测到无效的参考值 (ECMA 5 15.11.6.3)

实际上,这意味着当 JavaScript 尝试获取无法解析的引用的值时,将抛出 ReferenceError。(还有其他情况会引发 ReferenceError,尤其是在 ECMA 5 Strict 模式下运行时。如果您有兴趣,请查看本文末尾的阅读列表)

如需进一步阅读,请查看此处

于 2014-03-07T07:56:18.580 回答
0

因为函数定义是在执行之前评估的,所以变量赋值表达式不是。

于 2014-03-07T07:52:15.200 回答
0

这是因为console.log(window.baz);试图在 window 对象中查找变量,而 asconsole.log(baz)试图获取尚未定义的独立变量。

于 2014-03-07T07:52:41.947 回答