Вопрос по функциям и их параметрам
function add(a, b) {
return a + b; } пропускает через функцию square var squareAdd = fmap(square, add); console.log(squareAdd(2, 3)); Добрый день, интересует такой вопрос, как, при вызове функции squareAdd(2, 3) сделать так, что бы 2 и 3 попали в функцию add в качестве аргументов? |
Цитата:
|
function fmap(a, fn) {
return function( arg = fn()){ var resultElem = a(arg); return resultElem; } } function square(x) { return x * x; } Задача состоит в следующем, при вызове squareAdd(2, 3), аргументы 2 и 3 должны попасть в функцию add в качестве аргументов. Функция add возвращает 5, это значение в функции fmap попадает в функцию square в качестве аргумента, и в итоге функция fmap возвращает 25. |
AndreySt,
function add(a, b) {
return a + b
}
function square(a) {
return a * a
}
function fmap(a, b) {
return function(c, d) {
return a(b(c, d))
}
};
var squareAdd = fmap(square, add);
alert(squareAdd(2,3));
|
|
Aetae,
а для тех кто ни бум-бум в декораторах, можно код для данного случая? пока вариант для новых браузеров ... может и его можно поправить?
function add(a, b) {
return a + b
}
function square(a) {
return a * a
}
function fmap(...a) {
return (...b) => a.reduceRight((a, b) => [b.apply(null,a)], b);
};
var squareAdd = fmap(square,add);
alert(squareAdd(2,3));
|
Всем спасибо)
Работает как надо, теперь буду разбираться почему) Кстати, еще одном условием задачи было что бы в функцию при вызове можно было передать неограниченное количество аргументов. Решением стало: function fmap(a, b) { return function(...c){ return a(b(...c)); } } Спасибо, рони! |
Цитата:
function add(a, b) {
return a + b
}
function square(a) {
return a * a
}
function fmap() {
var functions = Array.prototype.slice.call(arguments);
return function(){
for(var i = functions.length, result = Array.prototype.slice.call(arguments); i--;)
result = functions[i].apply(this, [].concat(result));
return result;
}
};
var squareAdd = fmap(square,add);
alert(squareAdd(2,3));
Сам уже сто лет так не писал.) |
Aetae,
:thanks: |
| Часовой пояс GMT +3, время: 17:49. |