首页 > javascript中window与global是什么关系

javascript中window与global是什么关系

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


个人理解中,浏览器环境是不存在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);

我的理解是:

全局对象 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

浏览器里面 window 就是 global

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

javascriptconsole.log(window === window.window);     // true
【热门文章】
【热门文章】