js 普通函数与箭头函数this理解

 

普通函数this的理解:

var c=11
 function test1(){
 this.c=22;
 let d=function(){
   console.log(this.c);
 };
d();
 }
 var x=new test1();//输出11

this没调用默认指向window。 

  1. var x=11;

  2. var obj={

    1. x:22,

    2. say:function(){

      1. console.log(this.x)

  3. }

  4. obj.say();

  5. //console.log输出的是22

  6. 普通函数谁调用函数this就指向谁。

  7. var b=11;
    var obj={
     b:22,
     say:()=>{
     console.log(this.b);
    }
    }
    obj.say();//输出的值为11

所谓的定义时候绑定,就是this是继承自父执行上下文!!中的this,比如这里的箭头函数中的this.x,箭头函数本身与say平级以key:value的形式,也就是箭头函数本身所在的对象为obj,而obj的父执行上下文就是window,因此这里的this.x实际上表示的是window.x,因此输出的是11。(this只有在函数被调用,或者通过构造函数new Object()的形式才会有this)

  1. var a=11;

  2. function test2(){

    1. this.a=22;

    2. let b=()=>{console.log(this.a)}

    3. b();

  3. }

  4. var x=new test2();

  5. 个人理解:ES6中定义的时候绑定this的具体含义,应该继承的是父执行上下文里面的this,切忌是父执行上下文!!!这样就很多箭头函数中的指向不明确就迎刃而解了。

    注意:简单对象(非函数)是没有执行上下文的!
    箭头函数中,this指向的固定化,并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,导致内部的this就是外层代码块的this。正是因为它没有this,所以也就不能用作构造函数。

你可能感兴趣的:(js,this指向)