javascript - 为什么返回此 ECMAScript Harmony 箭头函数表达式会产生意外行为?

标签 javascript ecmascript-harmony arrow-functions

我一直在研究新的 ECMAScript 6 功能,这个问题与箭头函数有关。以下代码是分配给 Function 对象原型(prototype)的简单函数组合方法。使用简单的匿名函数可以很好地工作,但使用箭头函数时则不然。

Function.prototype.compose = function (bar) {
    var foo = this;
    return function () {
        return foo(bar.apply(null, arguments));
    };
};

var addFive = function (baz) {
    return baz + 5;
};

var addTen = function (hello) {
    return hello + 10;
};

var addFifteen = addFive.compose(addTen);

console.log(addFifteen(10));

http://jsfiddle.net/oegonbmn/

Function.prototype.compose = function (bar) {
    var foo = this;
    return () => foo(bar.apply(null, arguments));
};

var addFive = function (baz) {
    return baz + 5;
};

var addTen = function (hello) {
    return hello + 10;
};

var addFifteen = addFive.compose(addTen);

console.log(addFifteen(10));

http://www.es6fiddle.com/hyo32b2p/

第一个将 25 正确记录到控制台,而第二个则记录 function (hello) { return hello + 10; }105 这并不能准确地告诉我我做错了什么。

我没有返回箭头函数中的值,因为它应该隐式返回最后一个语句(在本例中是第一个和最后一个),并且我认为当前的问题与词法作用域和也许是这样的值(value)观。谁能解释一下吗?

最佳答案

thisarguments 都没有(重新)绑定(bind)在箭头函数中,而是在词法范围内。也就是说,您可以获得它们在周围范围内绑定(bind)的任何内容。

在 ES6 中,无论如何都不推荐使用参数。首选解决方案是使用剩余参数:

Function.prototype.compose = function (bar) {
  return (...args) => this(bar.apply(null, args));
};

或者,事实上:

Function.prototype.compose = function (bar) {
  return (...args) => this(bar(...args));
};

关于javascript - 为什么返回此 ECMAScript Harmony 箭头函数表达式会产生意外行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25226727/

相关文章:

javascript - 为什么这个事件处理程序有两个箭头函数?

javascript - 为什么箭头函数在渲染之间没有被内存?

javascript - AngularJS ng-Cloak 不起作用

javascript - Angular 1.2.24 : Testing directive throws undefined in scope. $摘要();

javascript - ES5 Object.assign 等效项

javascript - 在 ECMAScript 6 草案中,使用 StopIteration 异常来表示迭代结束的基本原理是什么?

javascript - Google Canary 浏览器是否支持 ES6 的生成器?

javascript - 使用 es6-arrow 函数语法检查数组中是否有两项总和等于给定值

javascript 失败 - 正则表达式错误

javascript - 如何让 Protractor 的部分等待或同步?