先看例子
var fn = function (v) {
return v
}
//等同于
var fn = v => v
如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。
var fn = () => v // 如果不需要参数
var fn = function (a, b) {
return a + b
}
//等同于
var fn = (a, b) => a + b // 需要多个参数
如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用return语句返回。
var sum = (num1, num2) => { return num1 + num2; }
如果箭头函数直接返回一个对象,必须在对象外面加上括号,否则会报错。
let getTempItem = id => ({ id: id, name: "Temp" });
使用注意点
-
箭头函数没有自己的this对象
-
不可以作为构造函数使用
-
不可以使用arguments对象,可以用rest参数代替
-
不可以使用
yield命令,因此箭头函数不能用作 Generator 函数。
不适用的场合
1.定义对象的方法,且该方法内部包括this。举例!
const cat = {
lives: 9,
jumps: () => {
this.lives--;
}
}
这种情况this会指向全局,而不是cat对象
2.需要动态this的时候,也不应使用箭头函数。举例!
var button = document.getElementById('press');
button.addEventListener('click', () => {
this.classList.toggle('on');
});
因为button的监听函数是一个箭头函数,导致里面的this就是全局对象,而不是动态指向被点击的按钮对象
扩展一下rest参数
ES6 引入 rest 参数(形式为...变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了。rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中。
function add(...val) {
var sum = 0;
for (var i of val) {
sum += i
}
return sum
}
console.log(add(2, 4, 6)); // 12
注意,rest 参数之后不能再有其他参数(即只能是最后一个参数)