前言,我们都知道es6中的箭头函数用的比较多;用起来也比较方便,接下来,我们就es6中的箭头函数来分析下用法:
首先,我们先看个例子:
//箭头函数的应用实例
//传统es5
var num1 = [1,2,3,4,5,4,3,2,1];
var mapResult = num1.map(function(item,index,array){
return item*2;
});
console.log(mapResult);
//es6箭头函数的应用
var mapResults = num1.map((item,index,array) => item*2);
console.log(mapResults);
其实,不难发现,两者运行的结构都是一样的,但是,第二种方法看起来比较简洁,其实这就是es6中的箭头函数;
官方文档这样定义es6的语法:
([param] [, param]) => {
statements
//to do sth
}
param => expression
param是参数,我们可以根据参数的不同,分析一下三种情况:
(1)如果参数为0个,我们可以这样用:
() => {......}
(2)如果参数有1个,我们可以这样写:
x => {......}
(3)如果参数是多个的话,我们可以这样写:
当然,上面第一个例子的应用就是参数多个情况的;
需要注意的是,return语句并不是必须的,另外,多行语句需要用{}括起来,单行是不需要的,并且会作为函数的返回值;
var arr = [2];
var myarr = arr.map(item => item*2);
console.log(myarr);//[4]
//var myarr1 = arr.map(item => return item*2);//会报错
var myarr2= arr.map(item => {return item*2});
console.log(myarr2);//[4]
var myarr3 = arr.map(item => {item*2});
console.log(myarr3);//[undefiend]---没有定义返回值,返回 undefined
//我们看下箭头函数默认参数和剩余参数的应用
var f = (x=1,y=2) => x+y;
console.log(f());//3
var func2 = (x, ...args) => { console.log(args) };
func2(1,2,3); // 输出 [2, 3]
箭头函数的特性:
官方文档出,箭头函数没有constructor,没有prototype,所以不支持new操作符;但是他对this的处理和一般函数不一样;箭头函数中的this始终指向函数定义时候的this,而非执行的时候;
var f = {
name:'andy',
age:28,
func:function(){
console.log(this.name);
},
create:function(){
setTimeout(function(){
console.log(this);//
this.func();
},500)
}
};
f.create();//this.func is not a function--不难发现,this现在指向window
//之所以会出错,是因为this的指向从f变成了全局;
var f1 = {
name:'andy',
age:28,
func:function(){
console.log(this.name);
},
create:function(){
var _that = this;
setTimeout(function(){
_that.func();
},500)
}
};
f1.create();
//这样通过外部事先保存的就好了;这里我们就可以利用箭头函数
var f2 = {
name:'andy',
age:28,
func:function(){
console.log(this.name);
},
create:function(){
setTimeout(() => {this.func()},500);
}
};
f2.create();//this指向函数定义时候