在 ECMAScript 2020 中,新加入了一个全局对象 globalThis,该对象可以在任何地方访问,而不受上下文环境的限制。与此同时,this 关键字也得到了一些改进,这让人们不禁想知道 globalThis 与 this 之间有何差异。本文将对 globalThis 和 this 进行比较,探讨它们的异同点。
globalThis 与 this 的定义
在 JavaScript 中,this 关键字用于引用当前对象。它的值取决于当前执行上下文的环境。例如,当使用全局上下文时,this 指向的是全局对象 window。而当在某个函数中使用时,this 指向的是该函数的调用者。然而,在使用箭头函数时,this 指向的是定义箭头函数的上下文。
与此不同,globalThis 是 ECMAScript 2020 中新引入的全局对象。globalThis 可以在任何上下文中访问,而不受限于当前执行上下文的环境。
globalThis 与 this 的使用
在浏览器中使用
在浏览器中,全局对象是 window。在全局环境中,this 与 globalThis 都指向 window。例如:
console.log(globalThis === this); // true console.log(globalThis === window); // true console.log(this === window); // true
但是,当在某个函数中使用时,this 的值会发生变化,而 globalThis 的值仍然是 window。例如:
function test() { console.log(globalThis === this); // false console.log(globalThis === window); // true console.log(this === window); // true } test();
在 Node.js 中使用
在 Node.js 中,全局对象是 global。在全局环境中,this 和 globalThis 都指向 global。例如:
console.log(globalThis === this); // true console.log(globalThis === global); // true console.log(this === global); // true
与浏览器中类似,当在某个函数中使用时,this 的值会发生变化,而 globalThis 的值仍然是 global。例如:
function test() { console.log(globalThis === this); // false console.log(globalThis === global); // true console.log(this === global); // true } test();
在 Web Workers 中使用
在 Web Workers 中,全局对象是 self。在全局环境中,this 和 globalThis 都指向 self。例如:
console.log(globalThis === this); // true console.log(globalThis === self); // true console.log(this === self); // true
与前面的例子类似,当在某个函数中使用时,this 的值会发生变化,而 globalThis 的值仍然是 self。例如:
function test() { console.log(globalThis === this); // false console.log(globalThis === self); // true console.log(this === self); // true } test();
globalThis 的用处
globalThis 可以用于跨平台的开发,例如在浏览器中,Node.js 中或 Web Workers 中使用相同的代码。在以前,开发人员可能需要使用条件语句来检查当前环境并选择正确的全局对象。但是,使用 globalThis,可以避免这种情况,并使代码更加简洁和通用。
例如,假设需要在全局环境中创建一个变量,可以使用以下代码:
globalThis.myVar = 'Hello World';
这将在任何环境中都创建一个名为 myVar 的全局变量,而不需要检查当前环境并选择正确的全局对象。
总结
globalThis 是 ECMAScript 2020 中新引入的全局对象,它可以在任何上下文中访问,而不受限于当前执行上下文的环境。与此不同,this 关键字用于引用当前对象,它的值取决于当前执行上下文的环境。在浏览器中,全局对象是 window,在 Node.js 中,全局对象是 global,在 Web Workers 中,全局对象是 self。globalThis 可以用于跨平台的开发,避免了需要使用条件语句来检查当前环境并选择正确的全局对象的情况。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65da67331886fbafa47ae933