JavaScript Global对象和Window对象之间有什么区别。我知道,两者都没有声明对象使用方法。
答案 0 :(得分:1)
window
对象封装了全局范围。在声明变量时省略var
(或let
)将隐式地将其作为属性添加到全局范围。它在这个意义上是独一无二的,因为在不同的范围内没有等同于window
。
我要去quote myself这个:
MDN's description of
var
表示全局范围绑定到全局对象。这表明声明一个变量(在顶层使用var,或者在函数内部没有var)只是将一个新属性添加到window
(或浏览器之外的等价物)。
试一试。在不使用var
的情况下创建变量,然后查看控制台中的window
对象。你会在那里看到它。这相当于这样做:
Object.defineProperty(window, 'foo', {
value: "bar",
enumerable: true // see @dandavis' comment on iterating over implicit global vars
)}
这并不能解释为什么就是这种情况。只是window
是唯一的,因为一切都在其中定义。
答案 1 :(得分:0)
我可能错了,但在我看来,所谓的全局变量是在窗口对象下定义的。
答案 2 :(得分:0)
在浏览器中运行的JavaScript中,窗口位于作用域链的顶部。如果定义“全局”变量,则暗示它位于窗口对象下。
例如:
// Global variable
var g = 0;
function foo(){
window.g = 1
// This will output '1'
alert(g);
}