当前位置:   article > 正文

es6:=>(箭头函数)基本用法_es6语法 => 函数

es6语法 => 函数

ES6 允许使用“箭头”(=>)定义函数。

var f = v => v;

// 等同于
var f = function (v) {
  return v;
};

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

箭头函数用=>代替了function和(),更加简洁
如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。

var f = () => 5;
// 等同于
var f = function () { return 5 };

var sum = (num1, num2) => num1 + num2;
// 等同于
var sum = function(num1, num2) {
  return num1 + num2;
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用return语句返回。

var sum = (num1, num2) => { return num1 + num2; }

    由于大括号被解释为代码块,所以如果箭头函数直接返回一个对象,必须在对象外面加上括号,否则会报错。

    // 报错
    let getTempItem = id => { id: id, name: "Temp" };
    
    // 不报错
    let getTempItem = id => ({ id: id, name: "Temp" });
    
    • 1
    • 2
    • 3
    • 4
    • 5

    下面是一种特殊情况,虽然可以运行,但会得到错误的结果。

    let foo = () => { a: 1 };
    foo() // undefined
    
    • 1
    • 2

    上面代码中,原始意图是返回一个对象{ a: 1 },但是由于引擎认为大括号是代码块,所以执行了一行语句a: 1。这时,a可以被解释为语句的标签,因此实际执行的语句是1;,然后函数就结束了,没有返回值。
    如果箭头函数只有一行语句,且不需要返回值,可以采用下面的写法,就不用写大括号了。

    let fn = () => void doesNotReturn();

      箭头函数可以与变量解构结合使用。

      const full = ({ first, last }) => first + ' ' + last;
      
      // 等同于
      function full(person) {
        return person.first + ' ' + person.last;
      }
      • 1
      • 2
      • 3
      • 4
      • 5

      箭头函数使得表达更加简洁。

      const isEven = n => n % 2 === 0;
      const square = n => n * n;
      • 1

      上面代码只用了两行,就定义了两个简单的工具函数。如果不用箭头函数,可能就要占用多行,而且还不如现在这样写醒目。
      箭头函数的一个用处是简化回调函数。

      // 正常函数写法
      [1,2,3].map(function (x) {
        return x * x;
      });
      
      // 箭头函数写法
      [1,2,3].map(x => x * x);
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

      注意:
      (1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
      (2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
      (3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
      (4)不可以使用yield命令,因此箭头函数不能用作 Generator 函数。
      不适用场合
      由于箭头函数使得this从“动态”变成“静态”,下面两个场合不应该使用箭头函数。
      第一个场合是定义函数的方法,且该方法内部包括this。

      const cat = {
        lives: 9,
        jumps: () => {
          this.lives--;
        }
      }
      • 1
      • 2
      • 3
      • 4
      • 5

      上面代码中,cat.jumps()方法是一个箭头函数,这是错误的。调用cat.jumps()时,如果是普通函数,该方法内部的this指向cat;如果写成上面那样的箭头函数,使得this指向全局对象,因此不会得到预期结果。
      第二个场合是需要动态this的时候,也不应使用箭头函数。

      var button = document.getElementById('press');
      button.addEventListener('click', () => {
        this.classList.toggle('on');
      });
      • 1
      • 2
      • 3

      上面代码运行时,点击按钮会报错,因为button的监听函数是一个箭头函数,导致里面的this就是全局对象。如果改成普通函数,this就会动态指向被点击的按钮对象。
      另外,如果函数体很复杂,有许多行,或者函数内部有大量的读写操作,不单纯是为了计算值,这时也不应该使用箭头函数,而是要使用普通函数,这样可以提高代码可读性。

      本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/115800
      推荐阅读
      相关标签
        

      闽ICP备14008679号