Loading...
fpfilipov94 avatar fpfilipov94 7 Точки

Exercises: Advanced Functions - 3.Functional Sum

Някой успял ли е да реши 3та задача от упражнението и ако да - може ли да сподели как. Успях да накарам функцията да връща себе си, ама как и къде да направя closure за стойността и как да точно променя toString и да запазя и него идея си нямам.

Тагове:
0
JavaScript Advanced
Silenci0 avatar Silenci0 27 Точки
Best Answer
function add(num) {
    let sum = num;

    function calc(num2) {
        sum += num2;
        return calc;
    }

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

Това решение работи, обаче ако трябва да съм честен и на мен ми е още трудно да схвана как точно.

1
fpfilipov94 avatar fpfilipov94 7 Точки

Благодарско! Какви глупости не пробвах, че до IIFE бях опрял даже...

0
djc_bg2015 avatar djc_bg2015 923 Точки

Ами ти с IIFE-то правиш клоужър, реално функцията по-горе прави същото :)

0
MiroslavMarinov avatar MiroslavMarinov 6 Точки

И аз, колега. Изобщо не разбрах какво се иска

0
fruityloops avatar fruityloops 22 Точки

И аз намерих от интернет решението. Тук: https://www.quora.com/Can-anyone-write-a-Javascript-function-that-does-this-add-1-2-8-should-return-11-i-e-the-sum-of-the-arguments-given-number-of-arguments-can-be-any-natural-number  е дадено обяснение за това как работи.

1
23/10/2016 19:08:35
djc_bg2015 avatar djc_bg2015 923 Точки
let f = (function () {
    let total = 0;
    return function sum(a) {
        total += a;
        sum.toString = () => total;
        return sum;
    }
})();

console.log(f(6)(7));

ето какво се случва, пазим резултата в clousure скоупа, функцията презаписва toString така че да връщша тотала и връща сама себе си.

тоест викаш квото викаш, и като му речеше стрингосай се то вика tostring и връща резултаа на изпълнението () => total

 

2
23/10/2016 20:08:39
Silenci0 avatar Silenci0 27 Точки

А какво се случва като ретърнеш функцията без скоби? И каква е разликата? 

0
djc_bg2015 avatar djc_bg2015 923 Точки

Ето различните извиквания и резултатите от тях:

 

Ако има нещо неясно пиши ;)

2
achobanov avatar achobanov -4 Точки

Не ми е ясно как точно се извиква .toString() когато викаме функцията с console.log(). И то даже го пише в условието - Node.js does not explicitly invoke toString(). Как тогава трябва да го извикаме, така че function(1)(2)(3)  да връща 6, а не  [Function]

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