我尝试在浏览器中运行以下代码。我认为属性window.a
和全局a
是内存中的相同单元格。有人可以给我一个解释这种行为的文章的链接。
// undefined
// if (window.a) {}
// Uncaught ReferenceError: a is not defined
// if (a) {}
答案 0 :(得分:0)
window
是一个对象,即使尚未设置变量undefined
,尝试访问未在对象上设置的键也始终返回a
。
var a = {}
a.b
>>> undefined
区别在于a
执行变量查找(并且失败,因为您没有定义它),window.a
对window
对象执行属性查找,返回undefined
。
答案 1 :(得分:-1)
他们是一样的:
a = 1;
a === window.a // true
编辑:对不起,那里有点太快了...我没有回答任何问题。本文很好地解释了差异: https://javascriptweblog.wordpress.com/2010/08/16/understanding-undefined-and-preventing-referenceerrors/
“如果引用的基值未定义,则该引用被视为无法解析”
window.a // base value is window, reference object is a
a // base value is a