严格模式下全局作用域中的 this 值为 undefined,脚本顶层或函数外部访问 this 会返回 undefined,且读写其属性将抛出 TypeError;模块默认启用严格模式,同样使全局 this 为 undefined。

在 JavaScript 严格模式下,全局作用域中的 this 值为 undefined,而不是非严格模式下的全局对象(如浏览器中的 window 或 Node.js 中的 global)。
严格模式下全局 this 的值是 undefined
当你在脚本顶层或函数外部直接访问 this,且该脚本启用了严格模式(通过 "use strict"; 声明),JavaScript 引擎会将全局上下文中的 this 绑定为 undefined。
- 这与非严格模式形成鲜明对比——后者会让
this指向全局对象 - 严格模式下,试图读取或写入
this的属性会直接报错(如this.a = 1会抛出TypeError) - 即使在立即执行函数表达式(IIFE)中,若函数本身启用严格模式,其内部的
this也不会自动绑定到全局对象
如何触发严格模式影响全局 this
严格模式需显式启用,方式包括:
- 整个脚本开头写
"use strict";(脚本级严格模式) - 函数体第一行写
"use strict";(函数级严格模式) - 模块(
.mjs文件或 ES 模块)默认启用严格模式,此时全局this也是undefined
常见误判场景和验证方法
容易混淆的情况:
立即学习“Java免费学习笔记(深入)”;
- 箭头函数不绑定
this,它继承外层作用域的this,所以严格与否不影响其行为逻辑 - 在事件处理、定时器回调等异步函数中,若未显式绑定,非严格模式下
this可能指向全局对象;严格模式下则为undefined,容易导致静默失败 - 可通过
console.log(this === undefined);快速验证当前上下文是否处于严格模式且this为undefined
实际开发中的注意事项
由于严格模式下 this 不再隐式指向全局对象,建议:
- 避免依赖全局
this存储变量,改用显式声明(如let/const)或模块导出 - 在需要访问全局对象时,使用规范方式:浏览器中用
globalThis,兼容性更好 - 函数内若需明确绑定
this,优先使用call、apply、bind或箭头函数,而非依赖默认绑定


















