2016-07-25 2 views
0

Я делаю упражнение для freecodecamp, где мне нужно создать функцию, которая суммирует два аргумента вместе. Если предоставляется только один аргумент, тогда возвращаем функцию, которая ожидает один аргумент и возвращает сумму.суммировать два аргумента, используя закрытие в javascript

Например, addTogether (2, 3) должен возвращать 5, а addTogether (2) должен возвращать функцию.

Мой код выглядит следующим образом:

function isNumber(n) { 
    return !isNaN(parseFloat(n)) && isFinite(n); 
} 

function isFunction(functionToCheck) { 
var getType = {}; 
return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]'; 
} 

function addTogether() { 
    var args = Array.prototype.slice.call(arguments); 
    var param1=args[0]; 

    var sum=function(){ 
    var argSub=Array.prototype.slice.call(arguments); 
    var param2=argSub[0]; 
    if (isNumber(param2)) 
     return; 
    else 
     return param1+param2; 
    }; 

    if (args.length===1){ 
    return sum; 
    } else if (isNumber(param1)){ 
    return param1+args[1]; 
    } 
} 

addTogether(2,3); 

Когда я addTogether (2) (3) должен возвращать 5, и когда я исполню addTogether (2, "3") должен возвращать «не определено '.

Я думаю, что я терплю неудачу в том, как я проверяю параметры. Я пробовал много разных конфигураций, и я застрял. Любой совет??

Thanks

+0

FYI это называется Выделка. – gcampbell

+0

что вы имеете в виду ?? Разве это не закрытие? Это определение, которое вы получаете на некоторых веб-сайтах, включая developer.mozilla – galeonweb

+0

Он использует замыкания, но метод разрушения таких функций называется [currying] (http://stackoverflow.com/questions/36314/what-is-currying). – gcampbell

ответ

-1

Использование крышки для добавления цифр. Несколько строк прокомментированы, чтобы дать представление о том, как вызываются внутренние функции. Ссылка: закрытие и IIFE в Javascript.

function sum(x) { 
 
    var input = x; 
 

 
    function add(y) { 
 
    return input + y; 
 
    } 
 
    return add; 
 
} 
 
//var sum1 = sum(2); 
 
//console.log(sum1(3)); // 5 
 
console.log(sum(2)(3)); //5

Смежные вопросы