【JS进阶】JavaScript 中 this 值的确定规则

JavaScript 中 this 值的确定规则

1. 默认绑定(独立函数调用)

当函数作为普通函数调用时,this 指向全局对象(浏览器中是 window,Node.js 中是 global),严格模式下是 undefined

function showThis() {
  console.log(this);
}

showThis(); // 浏览器中: window / 严格模式下: undefined

2. 隐式绑定(方法调用)

当函数作为对象的方法调用时,this 指向调用该方法的对象。

const obj = {
  name: 'Alice',
  greet: function() {
    console.log(`Hello, ${this.name}`);
  }
};

obj.greet(); // "Hello, Alice" - this 指向 obj

3. 显式绑定(call/apply/bind)

使用 call(), apply()bind() 可以显式设置 this 的值。

function greet() {
  console.log(`Hello, ${this.name}`);
}

const person = { name: 'Bob' };

greet.call(person); // "Hello, Bob"
greet.apply(person); // "Hello, Bob"

const boundGreet = greet.bind(person);
boundGreet(); // "Hello, Bob"

4. new 绑定(构造函数调用)

使用 new 调用函数时,this 指向新创建的对象。

function Person(name) {
  this.name = name;
}

const alice = new Person('Alice');
console.log(alice.name); // "Alice"

5. 箭头函数

箭头函数没有自己的 this,它会捕获所在上下文的 this 值。

const obj = {
  name: 'Charlie',
  greet: function() {
    setTimeout(() => {
      console.log(`Hello, ${this.name}`);
    }, 100);
  }
};

obj.greet(); // "Hello, Charlie" - this 来自 obj

6. 事件处理函数

在 DOM 事件处理函数中,this 通常指向触发事件的元素。

button.addEventListener('click', function() {
  console.log(this); // 指向 button 元素
});

优先级总结

  1. new 绑定
  2. 显式绑定(call/apply/bind)
  3. 隐式绑定(方法调用)
  4. 默认绑定

箭头函数的 this 由外层作用域决定,不受上述规则影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值