Global和Window对象的区别

时间:2014-02-19 22:29:28

标签: javascript

JavaScript Global对象和Window对象之间有什么区别。我知道,两者都没有声明对象使用方法。

3 个答案:

答案 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); 
}