ES6语法

时间:2016-08-10 19:49:15

标签: javascript babeljs

目前我正在研究React和Redux。我找到了一个样板文件,我正在查看所有示例代码。我的问题是我不完全理解这个ES6语法的含义。

到目前为止我学到的是hello = () => "Hello";等同于:

hello = function hello() {
  return "Hello";
};

然后将上述内容更改为hello = name => "Hello " + name;会将其转换为:

hello = function hello(name) {
  return "Hello " + name;
};

这一切都非常有意义,基本上它只是缩短了它,因此你不必编写函数及其返回语句。然而,我遇到了一些我不能说清楚的语法。它如下:

const mapActionCreators = {
  increment: () => increment(1),
  doubleAsync
}

以上代码转换为:

var mapActionCreators = {
  increment: function (_increment) {
    function increment() {
      return _increment.apply(this, arguments);
    }

    increment.toString = function () {
      return _increment.toString();
    };

    return increment;
  }(function () {
    return increment(1);
  }),
  doubleAsync: doubleAsync
};

我知道在这种情况下() => increment(1)正在转入:

(function () {
    return increment(1);
}),

总的来说,我想我的问题是, increment:如何转换为:

 increment: function (_increment) {
    function increment() {
      return _increment.apply(this, arguments);
    }

    increment.toString = function () {
      return _increment.toString();
    };

    return increment;
 }

代码的含义是什么?

1 个答案:

答案 0 :(得分:6)

箭头函数从创建它们的范围中捕获this的值。

apply可让您调用函数并明确其中this的值。

其余代码只是将正确的this提供给函数。

(如果您尝试对生成的函数进行字符串化,toString确保 right 函数被字符串化。