最近我在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}}的确切用例吗?使用此工具的理想方案是什么?
答案 0 :(得分:0)
为MDN says:
global globalThis属性包含全局this值,类似于global对象。
为什么有用:
从历史上看,访问全局对象在不同的JavaScript环境中需要使用不同的语法。在Web上,您可以使用窗口,自身或框架-但是在Web Worker中,只有self可以使用。在Node.js中,这些都不起作用,而必须使用global。
globalThis属性提供了一种跨环境访问全局“ this”值(从而访问全局对象本身)的标准方法。与window和self之类的类似属性不同,它保证可以在window和非window上下文中工作。这样,您可以以一致的方式访问全局对象,而不必知道代码在哪个环境中运行。为了帮助您记住名称,只需记住在全局范围内此值是globalThis。
如果您不确定要在什么环境中运行代码,或者不想跟踪它(毕竟,减少认知开销是一件好事!),可以使用{ {1}}。