Вдохновленный If Hemingway Wrote Javascript, я пытаюсь написать замыкающее замыкание функции с частной локальной переменной.Javascript Chainable Closure
Намеченный поведение:
> chainableCounter()
0
> chainableCounter(1)(2)()
3
Вот мой код:
function chainableCounter(n) {
var acc = 0;
var fn = function (x) {
if (x === undefined) {
return acc;
} else {
acc = acc + x;
return fn;
}
};
fn(n);
}
Когда я пытаюсь запустить это в РЕПЛ узла, это то, что я получаю:
> chainableCounter()
undefined
> chainableCounter(1)
undefined
> chainableCounter(1)()
TypeError: undefined is not a function
То, что chainableCounter(1)
возвращает undefined
вместо объекта функции, указывает на то, что мы никогда не ударяем строка return fn;
. Но более того, почему chainableCounter()
также возвращается undefined
, когда он должен вернуться 0
? Что мне не хватает?
Вы хотите, чтобы функция возвращала функцию. Попробуйте изменить последнюю строку из 'fn (n);' to 'return fn;'. –
@jordan, fn возвращает себя при вызове, и он хочет, чтобы он вызвал с arg в chainableCounter. Но возвратная часть права. – z5h
Вам нужно 'chainableCounter' вернуть функцию. –