this 默认绑定规则是什么:在全局环境与函数内部表现怎么样

作者:袖梨 2026-07-07
默认绑定指函数独立调用时this的取值规则:全局作用域中this指向全局对象(浏览器为window,Node.js为exports);普通函数直接调用时,非严格模式下指向全局对象,严格模式下为undefined;嵌套函数、回调函数及解构赋值后调用均适用此规则。

默认绑定是 this 最基础的规则:当函数以“独立调用”方式运行(即不作为对象方法、不用 call/apply/bind、也不用 new),this 就按默认规则绑定。

全局环境中的 this

在全局作用域(也就是最外层,没在任何函数里)直接写 this,它指向全局对象:

  • 浏览器中是 windowconsole.log(this === window) 返回 true
  • Node.js 中不是 window,而是当前模块的 exports 对象(常表现为一个空对象 {}
  • 全局变量会自动成为该对象的属性,比如声明 var a = 1,就能通过 this.a 访问

普通函数内部的默认绑定

函数被直接调用时(例如 foo()),内部的 this 也走默认绑定:

  • 非严格模式下,指向全局对象(浏览器为 window)
  • 严格模式下(加 "use strict"),this 为 undefined,不会自动 fallback 到 window
  • 嵌套函数、回调函数里如果也是独立调用,同样触发默认绑定——哪怕外层 this 已绑定,内层仍可能指向全局或 undefined

容易踩坑的典型场景

看似“从对象来”,实则已丢失隐式绑定,退回到默认绑定:

  • 把方法赋给变量再调用:const fn = obj.method; fn(); → this 不再是 obj
  • 作为回调传入(如定时器、事件监听):setTimeout(obj.method, 100) → method 被独立调用
  • 解构后调用:const { method } = obj; method(); → 同样失去上下文

默认绑定不看函数在哪定义,只看它怎么被调用。只要没被显式指定、没被对象“点”着调、也没被 new 或箭头函数捕获,就按这条规则走。

相关文章

精彩推荐