我一直在研究新的 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));
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)观。谁能解释一下吗?
最佳答案
this
和 arguments
都没有(重新)绑定(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/