全局执行上下文中this指向全局对象:浏览器为window,node.js为global;严格模式下函数内this为undefined,但全局脚本体仍为window。

在全局执行上下文中,this 就是指向当前环境的全局对象——浏览器里是 window,Node.js 里是 global。这不是“约定”,而是 JavaScript 规范定义的行为:当代码不在任何函数内部运行时,顶层的 this 自动绑定到这个全局宿主对象。
全局作用域下 this 的表现
直接在脚本最外层写 console.log(this),浏览器中输出的就是 window 对象;你给 this.a = 100 赋值,等价于 window.a = 100,之后访问 a 或 window.a 都能得到 100。
严格模式下的例外
如果整个脚本或函数启用了严格模式("use strict"),全局函数内部的 this 不再指向 window,而是 undefined:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
function f() { "use strict"; console.log(this); }→ 输出undefined - 但注意:全局脚本体(非函数内)即使在严格模式下,
this仍为window(规范特例)
和函数调用场景的区别
别把“全局上下文”和“普通函数调用”混淆。例如:
-
console.log(this)(直接写在 .js 文件顶部)→window -
function foo() { console.log(this); }; foo();→ 非严格模式下也是window,但这是“默认绑定”,属于函数调用规则,不是全局上下文本身
为什么设计成这样
早期 JavaScript 把全局对象作为所有未声明变量和函数的默认容器。this 在顶层指向它,保持了一致性:无论你是读 this.document 还是调 this.alert(),实际都是在操作 window 提供的能力。现代开发虽不鼓励依赖它,但理解这点能帮你快速识别意外的全局污染或 undefined 报错来源。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










