默认绑定仅在裸调用时生效,即函数直接调用且无对象前缀、call/apply/bind或new;隐式绑定由点号左边直接调用者决定this;严格模式下默认绑定的this为undefined;箭头函数不参与绑定,继承外层this。

默认绑定不处理对象属性访问——它只在没有对象属性访问时生效。
默认绑定只发生在“裸调用”场景
当函数被直接调用,既不带对象前缀(如 obj.method()),也不通过 call/apply/bind 或 new 调用,就属于默认绑定。此时函数和对象属性完全无关,谈不上“处理对象属性访问”。
-
function foo() { console.log(this); }→foo()是默认绑定 -
const obj = { bar: foo };→obj.bar()是隐式绑定,不是默认绑定 -
const fn = obj.bar; fn();才退化为默认绑定,因为点号访问已丢失
对象属性访问触发的是隐式绑定,不是默认绑定
只要调用形式是 obj.prop() 或 obj.nested.method(),JavaScript 就按隐式绑定规则处理:this 指向点号(.)左边的**直接调用者**。
-
obj.method()→ this 是obj -
obj.inner.fn()→ this 是inner,不是obj - 哪怕
method是从原型链继承来的,只要调用时带对象前缀,仍属隐式绑定
默认绑定与严格模式直接影响结果
一旦退回到默认绑定(比如方法被赋值后调用),严格模式会立刻暴露问题:
- 非严格模式:
this指向window(浏览器)或globalThis(Node.js) - 严格模式:
this为undefined,访问this.xxx直接报错 - ES6 模块顶层代码自动启用严格模式,所以模块内独立调用函数时 this 总是 undefined
箭头函数不参与任何绑定规则
箭头函数没有自己的 this,它忽略调用方式,直接沿用外层普通函数作用域的 this 值。
- 即使写成
obj.arrow = () => this.name,this 也不是 obj,而是定义时所在上下文的 this - 因此它不会因对象属性访问而改变,也不会退化为默认绑定
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











