this是在定义的时候绑定,而不是执行函数的时候绑定,他的值是固定不变的。
在前几种方法中,this的值是会发生变化的,但是在箭头函数里面,他的this是被绑定的
-
绑定在他的副作用域,每一个执行的箭头函数他本身是没有this值的,箭头函数的值继承自外围作用域,默认是类似这样的结构_self=this。
var x=11; var obj={ x:22, say:()=>{ console.log(this.x)-11 console.log(this);-window // 为什么定义的时候this会指向全局呢?--在定义的时候x和say是属于同级,所以定义say的时候绑定他的副父作用于是window }, _this:this, c:{ say:()=>{ console.log(this.x); 11 console.log(this._this)undefined console.log(x);11 //问题来了,箭头函数怎么才能指向对象里面的属性 } } }
-
使用举例
var s1=10 function timer(){ this.s1=0; this.s2=0; setInterval(()=>{ console.log(this.s1); this.s1++; },1000)//this.s1会变大 setInterval(function(){ console.log(this.s1) this.s1++; },2000)//外面的s1会变大,但是如果输出this.s2的话,第一次是undefined,之后会是NaN } var timer=new timer(); 使用1:箭头函数可以让setTimeout里面的this,绑定定义时所在的作用域,而不是指向运行时所在的作用域 使用2:利用this指向固定化的特性,封装回调函数。