es6箭头函数讲解

es6箭头函数的用法javascript

箭头函数是es6的一种函数的简写方法。java

以下:es6

var f = v = > v;
//等同于
var f = function(v){
      return v;
}
var sum = (num1,num2) => num1+num2 ;
//等同于
var sum = function(num1,num2){
      return num1+num2
}
[1,2,3].map(function (x) {
      return x * x;
});
// 箭头函数写法 [1,2,3].map(x => x * x);//简洁了许多

从例子咱们能够看出,省略了function,花括号‘{}’用‘=>’代替了。这种写法更简洁了。app

除了简洁以外,箭头函数还有另一个优势,就是函数体内的this的指向始终是指向定义它所在的对象,而不会指向调用它的对象,咱们知道es5中的函数是谁执行它,它就指向谁。dom

es5  eg:函数

var countdown ={ 'count':10, 'str':'hello!!!', showstr(){ var _this = this; var dom = document.getElementById('dom'); dom.innerHTML= _this.todouble(this.count); setInterval(function(){ var dom=document.getElementById('dom'); dom.innerHTML=_this.todouble(_this.count); _this.count --; if(_this.count <0){ dom.innerHTML=_this.str; } },1000) }, todouble(t){ var t = parseInt(t); if(t<10){ return '0'+t; }else{ return t; } } } countdown.showstr();

如上是一个倒计时完以后显示一个hello文本的效果,在setInterval里面,若是咱们直接写this的话,这个this是指向window的。所以咱们须要在setInterval函数以前先保存_this = this;this

当咱们使用es6的箭头函数的时候,就能够直接使用this了es5

es6  eg:spa

 //es6的写法。
     var countdown ={ 'count':10, 'str':'hello!!!', showstr(){ var dom = document.getElementById('dom'); dom.innerHTML= this.todouble(this.count); setInterval(() => { dom.innerHTML= this.todouble(this.count);; this.count --; if(this.count <0){ dom.innerHTML=this.str; return false; } },1000) }, todouble(t){ var t = parseInt(t); if(t<10){ return '0'+t; }else{ return t; } } } countdown.showstr();

上面一样的代码改为箭头函数以后咱们在setInterval里面就能够直接使用this了。code

箭头函数里面的this装换成es5后的代码以下:

// ES6
function fn() { setTimeout(() => { console.log('id:', this.id); }, 100); } // ES5
function fn() { var _this = this; setTimeout(function () { console.log('id:', _this.id); }, 100); }

上面代码中,转换后的ES5版本说明了,箭头函数里面根本没有本身的this,而是引用外层的this,因为箭头函数没有本身的this,因此也就不能用call()apply()bind()这些方法去改变this的指向。

箭头函数使用的注意的地方:

(1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。

(2)不能够看成构造函数,也就是说,不可使用new命令,不然会抛出一个错误。由于箭头函数的this是由定义它的对象决定的,对象的构造函数是顶层的,它的外层,没有this能够传进去给箭头函数使用。

(3)不可使用arguments对象,该对象在函数体内不存在。若是要用,能够用Rest参数代替。

(4)不可使用yield命令,所以箭头函数不能用做Generator函数。

相关文章
相关标签/搜索