Javascript中的globalThis是什么?理想的用例是什么?

时间:2019-07-23 06:26:36

标签: javascript ecmascript-6

最近我在Javascript中遇到了window。我不确定如果从函数中调用它将如何运行。每当它返回window对象时。如果真是这样,那我们为什么不直接使用globalThis对象呢?使用(function test(){ console.log(globalThis); // returns window })(); var obj = { key1: function(){ console.log(globalThis) }, key2: ()=>{ console.log(globalThis) }, key3: function(){ var arrFn = () => { console.log(globalThis); } arrFn(); } }; obj.key1(); // returns window object obj.key2(); // returns window object obj.key3(); // returns window object 有什么必要?

如果我从函数调用,则它正在返回窗口对象 示例:

globalThis

我相信const getGlobalThis = () => { if (typeof globalThis !== 'undefined') return globalThis; if (typeof self !== 'undefined') return self; if (typeof window !== 'undefined') return window; if (typeof global !== 'undefined') return global; // Note: this might still return the wrong result! if (typeof this !== 'undefined') return this; throw new Error('Unable to locate global `this`'); }; const theGlobalThis = getGlobalThis(); 的内部实现类似于以下代码:

globalThis

有人可以向我解释{{1}}的确切用例吗?使用此工具的理想方案是什么?

1 个答案:

答案 0 :(得分:0)

MDN says

  

global globalThis属性包含全局this值,类似于global对象。

为什么有用:

  

从历史上看,访问全局对象在不同的​​JavaScript环境中需要使用不同的语法。在Web上,您可以使用窗口,自身或框架-但是在Web Worker中,只有self可以使用。在Node.js中,这些都不起作用,而必须使用global。

     

globalThis属性提供了一种跨环境访问全局“ this”值(从而访问全局对象本身)的标准方法。与window和self之类的类似属性不同,它保证可以在window和非window上下文中工作。这样,您可以以一致的方式访问全局对象,而不必知道代码在哪个环境中运行。为了帮助您记住名称,只需记住在全局范围内此值是globalThis。

如果您不确定要在什么环境中运行代码,或者不想跟踪它(毕竟,减少认知开销是一件好事!),可以使用{ {1}}。