同样不太好懂的箭头函数this的指向

1、先来看一个例子吧:(输出什么呢?)

var foo={
  foo:function(){
    console.log(this);
  },
  b:()=>{console.log(this)}
}
foo.foo();    foo.b();

答:foo.foo()//foo;

       foo.b()//window;

第一个foo.foo()是普通函数的执行,里面的this指向调用foo函数的对象foo,那么第二个为什么是window呢?我开始是很不能 理解的,不是this指向定义时所在的对象吗?

其实我觉得这句话解释的不是很准确,记住下面这句话才是最重要的,this指向的固定化,并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,导致内部的this就是外层代码块的this。

所以在这里箭头函数内的this实际上是foo对象中的this。不懂什么意思,看下面这个代码块儿:

var foo={
  abs:this,
  foo:function(){
    console.log(this.abs);
    var a=()=>{console.log(this)};
    a();
  },
  b:()=>{console.log(this)}
}
foo.foo();
foo.b();

 abs绑定了foo对象的this,这里foo是个全局变量,里面的this也是指向window。所以结果为:window、foo、window;

a箭头函数的this就是foo()函数的this。b箭头函数的this就是foo对象中的this

猜你喜欢

转载自blog.csdn.net/lncci/article/details/82901080