严格模式下this默认为undefined而非全局对象,全局/普通函数调用时this为undefined,方法提取后调用暴露this丢失问题,箭头函数和显式绑定行为不变,ES模块天然启用严格模式。

严格模式下,this 不再默认绑定到全局对象,而是更明确、更安全地保持为 undefined —— 这是它和非严格模式最核心的区别。
全局或普通函数调用时 this 是 undefined
在非严格模式下,直接调用函数(如 foo())会让 this 指向 window(浏览器)或 global(Node.js),容易意外污染全局;而严格模式下,这种调用方式的 this 值就是 undefined,避免隐式绑定带来的副作用。
-
"use strict"; function fn() { console.log(this); } fn();→ 输出undefined - 即使在顶层脚本中,
this也不再是window,而是undefined
方法调用不受影响,但赋值后调用会暴露问题
当函数作为对象方法被调用(obj.method())时,this 依然指向 obj,这点和非严格模式一致。但一旦把方法提取出来单独调用,严格模式会立刻暴露 this 为 undefined,而非静默指向全局对象。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
const obj = { name: "Alice", say() { console.log(this?.name); } }; const fn = obj.say; fn();→ 严格模式下输出undefined(不会报错,但this.name读取失败) - 这种行为让“
this丢失”问题更容易被发现和修复
箭头函数和显式绑定行为不变
箭头函数本身不绑定 this,它始终继承外层词法作用域的 this 值,严格模式不影响这一特性。同样,call、apply、bind 的显式绑定能力也完全保留,只是它们传入的 thisArg 如果是 null 或 undefined,在严格模式下就真的用 undefined,而非自动转为全局对象。
立即学习“Java免费学习笔记(深入)”;
-
function foo() { console.log(this); } foo.call(null);→ 非严格模式输出window,严格模式输出undefined - 这使得绑定逻辑更可预测,尤其在封装工具函数或 polyfill 时更可靠
ES 模块环境天然启用严格模式
所有 .mjs 文件或通过 <script type="module"> 加载的脚本,默认处于严格模式,因此其中的顶层 this 就是 undefined。这是现代前端开发的常见场景,无需手动加 "use strict",但需意识到 this 的行为已与传统脚本不同。
- 模块内直接写
console.log(this);→ 输出undefined - 这也意味着模块内的普通函数调用,
this天然为undefined,不存在全局对象回退

















