JavaScript函数调用有四种模式1.方法调用时this指向调用对象2.函数调用时非严格模式this为全局对象严格模式为undefined3.构造调用时this指向新实例4.显式调用时通过call/apply/bind指定this。JavaScript中函数调用的四种模式JavaScript中函数的this值不是由函数定义决定的而是由**调用方式**决定的。共存在四种标准调用模式每种对应不同的this绑定规则1. 方法调用模式Method Invocation当函数作为对象的属性被调用时this指向该对象。const obj { name: Alice, greet() { console.log(this.name); // Alice }};obj.greet(); // this → obj2. 函数调用模式Function Invocation独立调用函数非对象属性、非new、非call/apply/bind在非严格模式下this指向全局对象浏览器中为window严格模式下为undefined。function foo() { console.log(this);}foo(); // 非严格window严格undefined3. 构造器调用模式Constructor Invocation使用new关键字调用函数时会创建新对象this绑定到该新实例。function Person(name) { this.name name;}const p new Person(Bob); // this → 新建的p实例4. 显式调用模式Explicit Invocation通过.call()、.apply()或.bind()手动指定this值。function log() { console.log(this.role);}const user { role: admin };log.call(user); // adminlog.apply(user); // adminlog.bind(user)(); // adminthis绑定优先级顺序当多种绑定方式共存时this取值遵循明确的优先级从高到低如下new 绑定使用new调用时无论是否用bind预设过this最终this都指向新创建的实例bind返回的函数被new调用时原绑定被忽略 显式绑定包括call、apply、bind。其中call/apply在运行时立即生效bind生成永久绑定函数但可被new覆盖 隐式绑定方法调用对象.方法() 形式this指向调用者对象。若存在多层嵌套如obj.fn()只看最直接的调用对象 默认绑定函数调用以上都不满足时触发。严格模式为undefined非严格模式为全局对象注意箭头函数不遵循上述任何规则——它没有自己的this始终继承外层普通函数作用域的this值词法绑定因此不参与该优先级表。常见陷阱与验证技巧理解优先级的关键在于“谁最终执行了函数”以及“以什么方式执行”。可借助以下方式快速判断 Zeemo AI 一款专业的视频字幕制作和视频处理工具