严格模式下函数默认绑定使this为undefined,而非全局对象;需通过"use strict"声明或es6模块自动启用;仅影响默认绑定,不改变call/apply/bind、箭头函数或对象方法的this行为。

在严格模式下,函数的默认绑定(即独立调用时的 this)会变成 undefined,而不是非严格模式下的全局对象(如浏览器中的 window 或 Node.js 中的 global)。这是严格模式最直接、最明确改变 this 绑定的行为之一。
严格模式如何触发 this 为 undefined
只要函数在严格模式下执行,且未通过对象属性、call/apply/bind 或箭头函数等方式显式绑定 this,那么该函数内部的 this 就是 undefined。
- 函数声明或函数表达式顶部写
"use strict";,整个函数体进入严格模式 - 整个脚本开头加
"use strict";,所有函数默认在严格模式下运行 - ES6 模块(
.mjs或type="module"的 script)自动启用严格模式,无需手动声明
对比非严格模式的默认绑定
非严格模式下,独立调用函数时 this 指向全局对象:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
function foo() { console.log(this); }
foo(); // 浏览器中输出 window,Node 中输出 global
严格模式下,同样的调用会输出 undefined:
"use strict";
function foo() { console.log(this); }
foo(); // 输出 undefined
注意:箭头函数和 call/apply/bind 不受此规则“覆盖”
严格模式只影响「默认绑定」,不影响其他绑定方式:
- 箭头函数不绑定
this,它继承外层作用域的this,与是否严格无关 -
foo.call(obj)、foo.apply(null)、foo.bind({})()都由调用方式决定this,严格模式不会让它们变成undefined - 对象方法调用(如
obj.method())仍绑定到obj,不受严格模式影响
实际开发中的意义
把默认 this 设为 undefined 能提前暴露错误:
- 避免意外修改全局对象(比如误写
this.name = "xxx"却污染了window.name) - 让
this的行为更可预测,便于调试和静态分析 - 配合 TypeScript 或 ESLint(如
no-invalid-this)能更好识别未绑定的this使用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










