this 是 JavaScript 中动态确定的关键字,指向函数调用时的上下文对象,具体取决于调用方式:普通调用时非严格模式指向全局对象、严格模式为 undefined;作为对象方法调用时指向该对象;构造函数或 class 实例方法中指向新创建的实例;箭头函数无自身 this;可通过 call/apply/bind 显式绑定。
this 是 JavaScript 中的一个关键字,它不是一个固定值,而是在函数执行时动态确定的,指向**当前函数调用的上下文对象**。它的具体指向完全取决于函数**如何被调用**,而不是函数定义的位置或方式。
普通函数调用时的 this
在非严格模式下,直接调用函数(如 fn()),this 指向全局对象(浏览器中是 window,Node.js 中是 global);在严格模式下,this 为 undefined。
- 不推荐依赖这种调用方式判断 this,容易出错且可读性差
- 可通过 use strict 主动避免意外绑定到全局对象
作为对象方法调用时的 this
当函数作为对象的属性被调用(如 obj.method()),this 指向该对象(即点号左边的对象)。
- 这是最常见也最符合直觉的 this 绑定场景
- 注意:如果把方法单独提取出来(如 const fn = obj.method;),再调用 fn(),就变成普通调用,this 不再指向 obj
构造函数与 class 中的 this
使用 new 调用函数时,this 指向新创建的实例对象;在 class 的实例方法中,thi
s 默认指向该 class 的实例。
- 构造函数内部的 this 是新对象,可用来初始化属性和方法
- 箭头函数不能用作构造函数,也没有自己的 this,会沿作用域链向上找
显式绑定与 call/apply/bind
可以用 call、apply 或 bind 显式指定函数运行时的 this 值。
- fn.call(obj, arg1, arg2) 立即执行,this 设为 obj
- fn.bind(obj) 返回一个新函数,this 永远绑定为 obj
- 常用于事件回调、定时器或高阶函数中“固化” this








