this

this 是很多人容易混淆的概念,但是其实一点也不难,只要理清几个规则就可以了

function fn() {
  console.log(this.a);
}
var a = 1
fn()

var obj = {
  a: 2,
  fn: fn
}
obj.fn()
// 以上2中情况,`this` 只依赖于调用函数前的对象,第二个优先级 大于 第一个优先级

// 下面情况中,this 的优先级最高,a只会绑定到c 上,this 不会有任何方式改变它的指向
var c = new fn()
c.a = 3
console.log(c.a);

// 还有就是利用 call, apply, bind 改变this的指向,这个优先级仅次于 new
  • 以上的情况明白了,this 基本上就没有什么问题了,下面我们了解箭头函数中的this
function b() {
  return () => {
    return () => {
      console.log(this)
    }
  }
}
console.log(b()()())

箭头函数其实是没有this的,这个函数中的this只取决于他外面的第一个不是箭头函数的函数的this,这个函数因为符合第一个情况,所以他的this 是 指向 window的。并且this 一旦绑定了上下文,就不会被任何代码更改了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容