初面网初面网

this指向

内容来自稀土掘金 this指向/箭头函数this指向详解

常见的this指向:

  • 全局作用域中或者普通函数中this指向全局对象window
  • 立即执行函数this必定指向window
  • 定时器this指向window
  • 事件中this指向事件源对象
  • 方法中谁调用就指向谁
  • 构造函数中this指向对象实例

隐式绑定

谁调用就指向谁

let obj = {
  name: 'obj',
  foo: function () {
    console.log(this);   //this指向obj
  }
}
obj.foo()
let obj = {
  name: 'obj',
  foo: function () {
    console.log(this);    //obj
    function test() {
      console.log(this);  //window  为什么?  因为test独立调用
    }
    test()
  }
}
obj.foo()

隐式丢失

let obj = {
  name: 'obj',
  foo: function () {
    console.log(this);  //window   为什么不是obj?  bar拿到obj.foo的引用,然后在全局下独立调用
  }
}
let bar = obj.foo
bar()

函数作参数

function foo(){
  console.log(this);  // window  obj.foo在bar函数内独立调用
}

function bar(fn){
  fn()
}

let obj = {
  name: 'obj',
  foo: foo
}

bar(obj.foo)

显示绑定

call、apply、bind

bind返回一个新函数,新函数指向绑定的对象,旧函数不会

new绑定

this指向函数实例化之后的对象

绑定规则优先级

new绑定 > 显示绑定 > 隐式绑定 > 默认绑定

箭头函数的this

箭头函数没有自己的this指向。它的this指向上一级作用域的this。

更新于 2025/2/26