箭头函数
在ES6中新增了箭头函数,箭头函数也是一个函数表达式
语法:
(参数1, 参数2) =>{
函数体;
}
-
首先说说箭头函数的基本语法:
-
1.如果参数只有一个会省略小括号
const fun = num =>{ console.log(num); } fun(1) //输出 1
```
-
2.如果箭头函数只有一条返回语句,可以省略花括号 return
// 普通函数 const isOdd = function(num){ return num % 2 == 0 } //箭头函数 const isOdd2= num => num % 2 == 0
一行代码搞定,是不是简单了很多
-
3.如果返回值是一个对象会被认成函数体
const obj = (a,b) =>({ a : a, b : b }) console.log(obj(1,2)); //{a: 1, b: 2}
再来说说箭头函数和ES5中函数的区别:
-
1 箭头函数没有 this,即使有也是指向外层this,这样说有点矛盾了根据自己的想法来,可以认为箭头函数有this但是箭头函数的this指向外层this。
//ES5 const obj = { age : 16, say : function(){ setTimeout(function(){ console.log(this,this.age) }, 0) } } obj.say(); //window undefined //ES6 const obj = { age : 16, say : function(){ setTimeout( () =>{ console.log(this,this.age) }, 0) } } obj.say(); //obj 16
箭头函数所访问的是父级作用域中的this。
-
不可用作为构造函数使用
var Person = (a) => { this.a = a } var p = new Person(1) //运行是会报错滴
可以根据上面的理解箭头函数是没有this的,还记得创建一个构造函数 new关键子所做的事情吗,其中第三步 :new功能将构造函数中的this指向新对象,就可以理解了。
-
3.没有argument
var foo = (val) => { console.log(arguments); } foo(); //报错 Uncaught ReferenceError: arguments is not defined