JavaScript中的 this指向

this

涉及面试题:如何正确判断 this?箭头函数的 this 是什么?

this总是指向它的调用者, 使用new会把 this绑定到new出来的对象上,不会被改变(除了 apply/call/bind这几特殊的)

function foo() {
  console.log(this.a)
}
var a = 1
foo() // foo的调用者是 window ,相当于 window.foo()  a = 1

const obj = {
  a: 2,
  foo: foo
}
obj.foo() // 这里foo() 的调用者是 obj, foo里面的this指向 obj,this.a = obj.a = 2

const c = new foo()
// 使用了new ,this 被绑定在了 c 上面,不会被任何方式改变 this,c 中并没有 a ,所以是 undefined

箭头函数中的 this

箭头函数是没有this ,箭头函数中的 this是取包裹着箭头函数的作用域中的 this

function a() {
  return () => {
    return () => {
      console.log(this)
    }
  }
}
console.log(a()()()) // window

对于bind, apply, call 可以改变 this的指向

bind 这些改变上下文的 API ,对于这些函数来说,this 取决于第一个参数,如果第一个参数为空,那么就是 window

如果对一个函数进行多次 bind,那么上下文会是什么呢?


let a = {}
let fn = function () { console.log(this) }
fn.bind().bind(a)() // => window

// fn.bind().bind(a) 等于
let fn2 = function fn1() {
  return function() {
    return fn.apply()
  }.apply(a)
}
fn2()

可以从上述代码中发现,不管我们给函数 bind 几次,fn 中的 this 永远由第一次 bind 决定,所以结果永远是 window

规则间的优先级:

  1. new 的方式优先级最高
  2. bindapplycall
  3. obj.foo()

this中的指向

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值