Loading...
a.angelov avatar a.angelov 1316 Точки

[Homework] Advanced JS - Functions and function expressions - Problem{4} Adding Numbers Using Functions

Някой реши ли тази задача... Нещо не мога да схвана условието и по-конкретно подаването на входа:

add(1)(0)(-1)(-1)

Какво се има в предвид, че последователно ще бъде извикано add(1), add(0), add(-1) и add(-1) ли?

Тагове:
3
JavaScript Advanced 04/03/2015 12:58:07
Filkolev avatar Filkolev 4482 Точки

Ми явно това е начинът, мислех, че може да има нещо по-хитро с рекурсията ама щом Stackoverflow казва така значи няма какво да го мислим повече.

1
a.angelov avatar a.angelov 1316 Точки

Най-чист ми се видя като че ли този вариант. Но пак за да се изпечата резултата трябва да се обърне към число с +:

function add(a) {
    var sum = a;

    function addInner(b) {
        sum += b;
        return addInner;
    }

        addInner.toString = function() {
            return sum;
        };

    return addInner;
}

var addTwo = add(2);
console.log(+addTwo); //2

var addTwo = add(2);
console.log(+addTwo(3)(5)(1)(7)); //18

3
05/03/2015 13:49:19
atanasovam avatar atanasovam 39 Точки

Тва с плюса ми изглежда като някакъв хак, ама не мога да измисля/намеря нещо друго, което да върши работа... В browser-а всичко си работи, ама в node.js се чупи нещо.

1
RumenVasilev avatar RumenVasilev 103 Точки

Аз това подкарах:
console.log(add(1)(2).toString());

Иначе в браузъра с alert() си работи и без to.String- a 

2
06/03/2015 21:47:36
Vacheva avatar Vacheva 154 Точки

console.log(parseFloat(add(2)(2)(3)));

Кастване стринг към число с parseFloat()

 

Edit: Ето нещо интересно - Functional Composition

Колегата f31m6d е споделил същия ресурс - ще пусна линк към него!

3
11/03/2015 00:18:30
atanasovam avatar atanasovam 39 Точки

зора беше да работи както в условието, без допълнения

var addTwo = add(2);
console.log(addTwo(3)(5));

трябва да принтира 10

 

ама май няма как да се случи тва :\

иначе има и други заобиколки - става и с ! отпред примерно

1
n1p3ha avatar n1p3ha 20 Точки

В node.js при мен си работи коректно това!

0
03/02/2016 21:36:46
AleksandurSeferinkin avatar AleksandurSeferinkin 333 Точки

Аз я реших по подобен начин -> Решение

В случая съм направил IIFE, което прави магии. Идеята е там, че при всяко извикване на функцията (addition) ние не дефинираме/предефинираме нови такива, а просто променяме едно число и връщаме настоящата, което си е доста по-бързо.

Също така съм override-нал default-ния console.log, защото не е забранено в условието. Това ми дава право да проверявам дали съм подал като параметър моята функция и ако да - принтираме резултата.

PS:  Ето още едно решение, което запазва default-ното поведение на console.log

0
05/03/2015 21:49:39
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.