о том, почему вы получили console.log (addFunction (5) (5)) == 11 см. Мой ответ выше.
И
если вы хотите позвонить console.log (AddFunction (5) (5)) и получить 10, вы можете использовать эти решения:
//other solutin
function tickF(n) {
var y = function(m) {
return f(m+n);
}, f = arguments.callee;
y.toString = y.valueOf = function() {
return n;
};
return y;
}
console.log('no memory leak', String(tickF(1)(2)(3)), String(tickF(1)(2)(3)))
ответ 6, 6
или с закрытием, но этот solutoin вы не можете позвонить во второй раз, потому что общая переменная не была сброшена после завершения цепочки вызовов:
//chain call fn()()()
var tick = (function(){
var total = 0;
function fnGenerator(arg) {
total += arg;
return arguments.callee;
}
fnGenerator.toString = function(){ return total;}
return fnGenerator;
})()
console.log('memory leak', String(tick(1)(1)), String(tick(1)(1)))
вы получите ответ н консоль: 2, 4
посмотреть все решения здесь: https://github.com/miukki/es5-bind/blob/master/tick.js
'num' является параметром' addFunction' и локальна туда. 'Num' в' fun' будет ссылаться на эту (увеличенную) переменную; глобальное 'num' затенено. – Bergi
var num = 10; не действует функция. и функцию addFunction (5) (5). ;/whats happend is: 1) first call addFunction (5) return fun и если num ++ его среднее 5 ++ = 6.-> 2) второй вызов addFunction (5) (5) вызов fun (5) {// и возврат 6 + 5} – miukki