Я играл с новыми функциями ECMAScript 6, и этот вопрос связан с функциями стрелок. Следующий код представляет собой простой метод функциональной композиции, назначенный прототипу объекта Function
. Он отлично работает при использовании простой анонимной функции, но не при использовании функции стрелки.
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
в консоли, тогда как второй регистрирует функцию (hello) { return hello + 10; }105
, которая точно не говорит мне, что я делаю неправильно.
Я не возвращаю значение в стрелочной функции, поскольку предполагается, что она неявно возвращает самый последний оператор (первый и последний в этом случае), и я полагаю, что проблема связана с лексической областью действия и значениями этого , может быть. Кто-нибудь может объяснить?