Показать сообщение отдельно
  #3 (permalink)  
Старый 27.01.2013, 12:14
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от dima***
Есть две функции.Нужно получить третью функцию сложив первую и вторую.
высший класс оперирования терминами функционального программирования

ну держи "оператор" сложения функций
/*
При передаче списка функций вернёт функцию, которая
последовательно применит переданные аргументы к переданному списку,
применив оператор арифметической суммы к результату функции списка 
и вернёт результат.
*/
function plus (/* function1, function2, ... functionN */) {
    var functions = [].slice.call(arguments), m = functions.length;
    return function () {
        for (var i = 0, acuum = 0; i < m; i++) {
            acuum += functions[i].apply(window, arguments);
        }
        return acuum;
    };
}



ну и пример использования :
function plus (/* function1, function2, ... functionN */) {
    var functions = [].slice.call(arguments), m = functions.length;
    return function () {
        for (var i = 0, acuum = 0; i < m; i++) {
            acuum += functions[i].apply(window, arguments);
        }
        return acuum;
    };
}

function a(x,y){
    var z=x+y;
    return z;
}

function b(x,y){
    var z=x+y;
    return z;
}

var a_plus_b = plus(a, b);

alert( a_plus_b(2, 3) );
Ответить с цитированием