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