03- global 顶层对象

2018-08-21  本文已影响25人  夏海峰

1、从 ES6 开始,全局变量将逐步与顶层对象的属性脱钩

var 命令和 function 命令声明的全局变量,依旧是顶层对象 window 的属性.
let 命令、const 命令、class 命令声明的变量,不属于顶层对象的属性。也就是说,从 ES6 开始,全局变量将逐步与顶层对象的属性脱钩。

var a = 1;
// window.a;  // 1

let b = 2;
// window.b;  // undefined

2、顶层对象封装

浏览器里面,顶层对象是window,但 Node 和 Web Worker 没有window。浏览器和 Web Worker 里面,self也指向顶层对象,但是 Node 没有self。Node 里面,顶层对象是 global,但其他环境都不支持。

功能封装:获取各种不同环境下的js顶层对象

// 方案1
let globalObj = (
    typeof window !== 'undefined'
    ? window
    : (typeof process === 'object' && typeof require === 'function' && typeof global === 'object')
    ? global
    : this
);
console.log(globalObj);
// 方案2
var getGlobal = function() {
    if (typeof self !== 'undefined') return self;
    if (typeof window !== 'undefined') return window;
    if (typeof global !== 'undefined') return global;
    throw new Error('unable to locate global object');
}
console.log(getGlobal());

system.global垫片库,用于获取js环境下的顶层对象。


完!!!
上一篇下一篇

猜你喜欢

热点阅读