严格模式下全局作用域的this为undefined;非严格模式下指向全局对象,此举避免污染全局、提升一致性与可检测性。

在严格模式下,全局作用域中的 this 不再指向全局对象(如浏览器的 window 或 Node.js 的 global),而是明确为 undefined。
严格模式如何改变全局 this 的行为
非严格模式下,顶层代码中直接写 this,它默认绑定到全局对象:
console.log(this === window); // true(浏览器)this.a = 100; console.log(window.a); // 100
一旦启用严格模式(通过 "use strict"; 声明),全局作用域的 this 就被强制设为 undefined:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
"use strict"; console.log(this); // undefined"use strict"; this.b = 200; // 不报错但无效,b 不会挂到全局对象上
为什么这样设计
该规范是为了避免意外污染全局对象,提升代码健壮性:
- 防止开发者误将变量挂到
window上,造成命名冲突或内存泄漏 - 让
this的行为更一致:函数调用时若未明确绑定,严格模式统一返回undefined,而非“隐式回退”到全局对象 - 便于静态分析和工具检测潜在错误(比如访问
this.xxx前未确认this是否有效)
注意边界情况
这个规则仅适用于“全局作用域”,不包括模块顶层:
- ES 模块(
.mjs或type="module")默认启用严格模式,其顶层this也是undefined - CommonJS 模块(Node.js)中,模块顶层的
this指向exports,与严格模式无关——这是 Node.js 的特殊实现,不属于语言规范 - 立即执行函数表达式(IIFE)内部是否严格,不影响外部全局作用域的
this绑定
验证方式很简单
在浏览器控制台或脚本开头加一行,然后测试:
"use strict"; console.log(this); // 看输出是不是 undefined- 对比去掉
"use strict"后的结果,就能直观看到差异
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










