Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是Javascript中的globalThis?这方面的理想用例是什么?_Javascript_Ecmascript 6 - Fatal编程技术网

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

什么是Javascript中的globalThis?这方面的理想用例是什么?,javascript,ecmascript-6,Javascript,Ecmascript 6,最近我在Javascript中遇到了关于globalThis。如果它是从函数调用的,我不确定它将如何运行。每次它返回窗口时对象。如果是这样的话,那么我们为什么不直接使用窗口对象呢。使用globalThis有什么必要 如果我从函数调用,那么它将返回window对象 例如: (function test(){ console.log(globalThis); // returns window })(); var obj = { key1: function(){

最近我在Javascript中遇到了关于
globalThis
。如果它是从函数调用的,我不确定它将如何运行。每次它返回
窗口时
对象。如果是这样的话,那么我们为什么不直接使用
窗口
对象呢。使用
globalThis
有什么必要

如果我从函数调用,那么它将返回window对象 例如:

(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
属性包含与全局对象类似的全局this值

为什么它有用:

历史上,在不同的JavaScript环境中,访问全局对象需要不同的语法。在web上,您可以使用
窗口
自我
、或
框架
——但在web Workers中,只有
自我
可以工作。在Node.js中,这些都不起作用,您必须改用
global

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

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


如果您确实知道代码将在什么环境中运行,并且代码永远不会被移植到不同的环境中,那么可以继续使用
窗口
(或环境全局对象的适当其他属性).

globalThis
的支持在每个浏览器中都有。@VLAZ Saswat:这个@deceze缺少什么我想我每天都能学到新东西。。。