浏览器中this指向window(即globalthis),node.js中指向module.exports,该行为由宿主环境决定且不受严格模式影响;globalthis则统一提供全局对象访问入口。

浏览器和 Node.js 环境下,全局执行上下文中的 this 指向不同对象,这是由各自宿主环境的全局对象决定的,不是语法差异,而是运行时规范行为。
浏览器中:this 指向 window(也是 globalThis)
在浏览器脚本最外层(即不在任何函数内),this 直接等于 window 对象,也等同于 globalThis:
console.log(this === window); // trueconsole.log(this === globalThis); // true- 给
this.a = 100赋值,等价于window.a = 100,之后可直接访问a或window.a
Node.js 中:this 指向 module.exports
在 Node.js 的普通 .js 文件顶层(CommonJS 模块),this 不是 global,而是当前模块的 module.exports:
console.log(this === module.exports); // true-
this.name = 'test'等价于module.exports.name = 'test' - 此时
this !== global,也不等于globalThis(globalThis在 Node.js 中确实等于global,但顶层this不指向它)
严格模式不影响全局脚本体的 this
无论是否启用 "use strict",全局执行上下文中的 this 行为不变:
- 浏览器中仍是
window - Node.js 中仍是
module.exports - ⚠️ 注意:这个“例外”只适用于全局脚本体;函数内部的
this在严格模式下才变为undefined
补充:globalThis 是跨环境统一入口
虽然 this 因环境而异,但现代 JavaScript 提供了 globalThis 作为标准方式获取全局对象:
- 浏览器中:
globalThis === window - Node.js 中:
globalThis === global - 它不依赖执行上下文,也不受严格模式影响,适合写通用工具代码
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











