javascript中window与global是什么关系

在chrome中看了一下,global是全局对象,在script标签中声明的全局变量都会添加到global中,另外global中有一个window属性,值是window。他们之间是什么关系?

阅读 14.9k
3 个回答

我的理解是:

全局对象 global 是在全局上下文中的变量对象,对这个全局变量 global 的访问有两种情况

  1. 访问其属性
    Math、String等等都可以看作是全局对象 global 的属性,对 global 的属性的访问往往省略掉前缀,比如
Math.abs(1)

其实就是

[[global]].Math.abs(1)

global 变量本身是不可以直接访问的

  1. 不能直接访问 global ,是否可以间接访问?是

global 也可以创建属性来指向其本身,也就是 window 引用了 global
所以访问 window 即是访问 global

此外,在全局上下文里面,也可以用 this 访问 global,所以在全局上下文里面

window === this;//true

个人理解中,浏览器环境是不存在global对象的,如果你在chrome console中看到的话,可能是该网页所生成的。
证明:打开about:blank

console.log(global);

所以,有可能是你的网站有这句代码,才导致你这个现象

window.global = window;

然后,在nodejs等服务端js环境中会存在global等变量,与浏览器的window对象类型相似,是全局可访问的对象,因此很多人都喜欢这样写,用来让代码兼容浏览器端和node服务端

(function(global) {
  // do things with global
})(typeof window !== 'undefined' ? window : global);

浏览器里面 window 就是 global

nodejs 里没有 window,但是有个叫 global 的

javascriptconsole.log(window === window.window);     // true
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题