箭头函数

109 阅读2分钟

先看例子

        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" });

使用注意点

  1. 箭头函数没有自己的this对象

  2. 不可以作为构造函数使用

  3. 不可以使用arguments对象,可以用rest参数代替

  4. 不可以使用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 参数之后不能再有其他参数(即只能是最后一个参数)