hand
_1_11_238
4
返回栏目
0k
2k
1k
2k
1k
1k
1k
2k
2k
2k
1k
2k
1k
2k
1k
1k
1k
1k
1k
2k
1k
1k
1k
1k
1k
1k
1k
1k
1k
2k
1k
1k
1k
1k
1k
1k
1k
1k
1k
2k
1k
1k
1k
1k
1k
1k
1k
2k
1k
2k
1k
1k
1k
1k
1k
1k
1k
2k
2k
1k
1k
1k
2k
1k
1k
2k
2k
1k
1k
1k
2k
1k
1k
2k
2k
1k
2k
1k
1k
2k
2k
2k
3k
3k
2k
3k
2k
3k
3k
3k
1k
2k
3k
2k
2k
3k
3k
2k
2k
6k
3k
2k
2k
5k
3k
4k
3k
3k
2k
4k
3k
3k
2k
3k
3k
1k
4k
4k
4k
2k
5k
3k
2k
3k
4k
3k
3k
4k
2k
3k
3k
4k
2k
2k
3k
4k
3k
3k
2k
5k
2k
3k
3k
3k
3k
2k
3k
3k
3k
2k
2k
2k
2k
3k
2k
2k
2k
3k
2k
2k
2k
2k
2k
2k
0.1k
0.2k
3k
2k
3k
2k
0.1k
2k
2k
4k
2k
2k
1k
2k
2k
3k
3k
3k
3k
2k
2k
3k
3k
3k
4k
3k
3k
4k
3k
2k
2k
3k
3k
3k
3k
3k
3k
2k
3k
3k
4k
4k
3k
3k
2k
2k
3k
2k
2k
1k
2k
3k
1k
2k
2k
2k
2k
2k
2k
2k
2k
2k
4k
2k
3k
2k
1k
2k
2k
2k
2k
2k
3k
2k
3k
1k
2k
2k
2k
0k
2k
2k
2k
2k
2k
2k
2k
3k
2k
2k
1k
1k
3k
2k
3k
1k
2k
1k
2k
2k
2k
2k
3k
1k
3k
2k
2k
2k
2k
2k
2k
1k
2k
2k
4k
3k
3k
2k
2k
2k
2k
2k
2k
4k
3k
3k
3k
2k
2k
2k
2k
2k
2k
3k
4k
返回前端 - Javascript栏目
作者:
贺及楼
成为作者
更新日期:2025-02-21 21:01:00
在 JavaScript 的世界里,this
关键字扮演着非常重要的角色,它的值会根据函数的调用方式而发生变化。而全局 this
对象指的是在全局作用域中 this
所指向的对象。不同的 JavaScript 运行环境下,全局对象的获取方式有所不同,下面我们就来深入探讨一下。
在 JavaScript 中,this
关键字是一个动态的上下文引用,它的值取决于函数的调用方式。在全局作用域中,this
指向全局对象。全局对象是一个特殊的对象,它是所有全局变量和函数的宿主。全局对象提供了一些全局的属性和方法,例如 console
、setTimeout
等。
在浏览器环境中,全局对象是 window
对象。所有在全局作用域中声明的变量和函数都会成为 window
对象的属性和方法。
// 在全局作用域中声明一个变量
var globalVariable = 'I am a global variable';
// 可以通过 window 对象访问这个变量
console.log(window.globalVariable); // 输出: I am a global variable
// 在全局作用域中,this 指向 window 对象
console.log(this === window); // 输出: true
在 Node.js 环境中,全局对象是 global
对象。与浏览器环境不同,Node.js 中的全局变量和函数并不会直接成为 global
对象的属性。
// 在全局作用域中声明一个变量
var nodeGlobalVariable = 'I am a Node.js global variable';
// 直接通过 global 对象访问会得到 undefined
console.log(global.nodeGlobalVariable); // 输出: undefined
// 在全局作用域中,this 指向一个空对象 {},而不是 global 对象
console.log(this === global); // 输出: false
Web Worker 是浏览器提供的一种在后台线程中运行脚本的机制。在 Web Worker 环境中,全局对象是 self
对象。
// 在 Web Worker 中,this 指向 self 对象
console.log(this === self); // 输出: true
// 可以通过 self 对象定义全局变量和函数
self.workerVariable = 'I am a Web Worker global variable';
console.log(self.workerVariable); // 输出: I am a Web Worker global variable
在 ECMAScript 模块(ES Modules)环境中,全局对象的获取方式与普通的全局作用域有所不同。在模块中,this
的值为 undefined
。不过,仍然可以通过一些间接的方式获取全局对象。
// 在 ES 模块中,this 的值为 undefined
console.log(this); // 输出: undefined
// 可以通过以下方式获取全局对象
const globalObject = typeof window!== 'undefined'? window : typeof global!== 'undefined'? global : self;
console.log(globalObject);
为了在不同的 JavaScript 环境中统一获取全局对象,ES2020 引入了 globalThis
关键字。globalThis
提供了一种标准的方式来访问全局对象,无论在浏览器、Node.js 还是其他环境中都可以使用。
// 在任何环境中都可以使用 globalThis 获取全局对象
console.log(globalThis);
// 在浏览器环境中,globalThis 指向 window 对象
console.log(globalThis === window); // 输出: true
// 在 Node.js 环境中,globalThis 指向 global 对象
console.log(globalThis === global); // 输出: true
// 在 Web Worker 环境中,globalThis 指向 self 对象
console.log(globalThis === self); // 输出: true
不同的 JavaScript 运行环境下,全局对象的获取方式有所不同,下面是一个简单的表格总结:
环境 | 全局对象 | 获取方式 |
---|---|---|
浏览器 | window |
this 或 window |
Node.js | global |
global |
Web Worker | self |
this 或 self |
ES 模块 | 无直接方式 | 可通过判断 window 、global 、self 来获取 |
通用 | globalThis |
globalThis |
通过了解不同环境下全局对象的获取方式,我们可以编写出更加健壮和可移植的 JavaScript 代码。在实际开发中,建议优先使用 globalThis
来获取全局对象,以确保代码在不同环境中都能正常工作。
前端 - Javascript
整章节共299节
快分享给你的小伙伴吧 ~