美文网首页前端直通车
es6全家桶(二)—— 箭头函数

es6全家桶(二)—— 箭头函数

作者: 一个顽固的橙子 | 来源:发表于2017-07-17 11:30 被阅读33次
    图片来自简书

    es6全家桶(二)—— rest参数、箭头函数

    箭头函数

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

    var f = v => v;
    上面的箭头函数等同于:
    var f = function(v) { return v; };

    箭头函数的一个用处是简化回调函数。

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

    下面是 rest 参数与箭头函数结合的例子。

    const numbers = (...nums) => nums;
    numbers(1, 2, 3, 4, 5)
    // [1,2,3,4,5]
    
    const headAndTail = (head, ...tail) => [head, tail];
    headAndTail(1, 2, 3, 4, 5)
    // [1,[2,3,4,5]]
    ```
    
    箭头函数有几个使用注意点。
    
    (1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
    
    (2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
    
    (3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
    
    (4)不可以使用yield命令,因此箭头函数不能用作 Generator 函数。
    
    举例:请问下面的代码之中有几个this?
    ``` javascript
    function foo() {
      return () => {
        return () => {
          return () => {
            console.log('id:', this.id);
          };
        };
      };
    }
    
    var f = foo.call({id: 1});
    
    var t1 = f.call({id: 2})()(); // id: 1
    var t2 = f().call({id: 3})(); // id: 1
    var t3 = f()().call({id: 4}); // id: 1
    ```
    上面代码之中,只有一个this,就是函数foo的this,所以t1、t2、t3都输出同样的结果。
    
    因为所有的内层函数都是箭头函数,都没有自己的this,它们的this其实都是最外层foo函数的this。
    除了this,以下三个变量在箭头函数之中也是不存在的,指向外层函数的对应变量:arguments、super、new.target。
    由于箭头函数没有自己的this,所以当然也就不能用call()、apply()、bind()这些方法去改变this的指向。
    
    
    ```

    相关文章

      网友评论

        本文标题:es6全家桶(二)—— 箭头函数

        本文链接:https://www.haomeiwen.com/subject/ptdfkxtx.html