JavaScript中this的值取决于调用位置而非定义位置:1.默认绑定(独立调用)非严格模式指向window,严格模式为undefined;2.隐式绑定(obj.method())指向调用对象;3.显式绑定(call/apply/bind)强制指定this;4.new绑定(new Foo())指向新实例,优先级最高。

JavaScript 中 this 的值不取决于函数定义的位置,而完全取决于函数**被调用时的上下文(即调用位置)**。理解这一点是掌握 this 的核心。
默认绑定:独立调用函数
当函数作为普通函数被直接调用(没有点号、没有对象上下文、没有 new、没有 call/apply/bind),在非严格模式下 this 指向全局对象(浏览器中是 window),严格模式下为 undefined。
-
foo()→ 默认绑定 -
function foo() { console.log(this); } foo();(非严格模式输出window)
隐式绑定:通过对象属性调用
当函数作为对象的方法被调用(即通过 obj.method() 形式),this 自动绑定到该对象(obj)。
-
obj.foo()→ this 是obj - 注意:只看调用时的“点前面是谁”,不是定义时在哪。比如
let bar = obj.foo; bar();就会丢失隐式绑定,退回到默认绑定
显式绑定:call、apply、bind
通过 fn.call(obj, ...)、fn.apply(obj, [...]) 或 let bound = fn.bind(obj),可强制指定 this 值。
立即学习“Java免费学习笔记(深入)”;
-
call和apply立即执行,区别只在参数传入方式 -
bind返回一个新函数,this 被永久绑定(硬绑定),后续再调用无法覆盖
new 绑定:构造函数调用
使用 new Foo() 调用函数时,会创建新对象,并将 this 绑定到这个新实例上。
- 优先级高于隐式绑定和默认绑定
- 如果构造函数显式返回一个对象,则 this 效果被覆盖;返回基本类型则忽略,仍返回新实例



















