我在接受采访时得到了这个问题,我很好奇为什么这两个输出不同的东西:
(function() {
console.log(bar);
console.log(baz);
foo();
function foo() {
console.log('aloha');
}
var bar = 2;
baz = 3;
})();
OUPUTS:
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
的方式有何不同?我虽然全局自动附加到窗口?
答案 0 :(得分:1)
ReferenceError表示检测到无效参考值(ECMA 5 15.11.6.3)
实际上,这意味着当JavaScript试图获取无法解析的值时,将抛出ReferenceError 参考。 (还有其他情况会出现ReferenceError 抛出,最值得注意的是在ECMA 5 Strict模式下运行时。如果你是 有兴趣查看本文末尾的阅读清单)
如需进一步阅读,请查看here。
答案 1 :(得分:0)
因为函数定义在执行之前被计算,所以变量赋值表达式不是。
答案 2 :(得分:0)
这是因为console.log(window.baz);
正在尝试在窗口对象中找到变量,而console.log(baz)
正试图获取一个尚未定义的独立变量。