默认绑定规则:非严格模式下this指向全局对象,严格模式下为undefined;触发条件为函数独立调用,且非方法、非显式绑定、非构造、非箭头函数。

在 JavaScript 中,普通函数(非箭头函数、非方法调用、非构造调用)在**非严格模式下**,this 会默认绑定到全局对象;在**严格模式下**,则绑定为 undefined。这就是“默认绑定”规则的核心。
默认绑定的触发条件
当函数以最简单的方式被调用时,即:
- 不作为对象的方法调用(没有点号
.或方括号[]) - 不是通过
call/apply/bind显式绑定 - 不是作为构造函数用
new调用 - 不是箭头函数(箭头函数不遵循默认绑定)
非严格模式下的默认绑定
此时 this 指向全局对象(浏览器中是 window,Node.js 中是 global):
function foo() {
console.log(this === window); // true(浏览器环境)
}
foo(); // 默认绑定 → this = window
严格模式下的默认绑定
启用严格模式后,独立调用函数时 this 不再自动指向全局对象,而是保持为 undefined:
"use strict";
function bar() {
console.log(this); // undefined
}
bar(); // 默认绑定 → this = undefined
这能避免意外修改全局对象,是更安全的默认行为。
常见陷阱与注意事项
- 赋值后调用会丢失绑定:即使函数原本是对象方法,一旦赋值给变量再调用,就触发默认绑定
-
回调函数中容易误用:例如
setTimeout(obj.method, 100),此时method是独立调用,this不再是obj -
模块顶层的 this 不是 global:ES6 模块中顶层
this是undefined(无论是否严格模式),因为模块脚本默认启用严格模式
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











