Я практикую замыкания, и моя задача на данный момент:
Написать функцию once
, которая принимает обратный вызов в качестве ввода и возвращает функцию.Когда возвращаемая функция вызывается в первый раз, она должна вызвать обратный вызов и вернуть этот вывод.Если он вызывается в любое дополнительное время, вместо повторного вызова обратного вызова он просто возвращает выходное значение с момента первого вызова.
Мой обратный вызов:
const addByX = function (num1) {
let number = num1;
function adding(num2) {
console.log(number + num2);
}
return adding;
}
//addByX(2)(8);
let addByTwo = addByX(2);
И моя основная функция:
const once = function (func) {
let isFirst = true;
let firstOutput;
function inside(numberToPass) {
if (isFirst) {
firstOutput = func(numberToPass);
isFirst = false;
return func(numberToPass);
} else {
return firstOutput;
}
}
return inside;
}
Он работает, но когда я его вызываю
const onceFunc = once(addByTwo);
console.log(onceFunc(4)); //should log 6
console.log(onceFunc(10)); //should log 6
, он возвращает мои значения и также не определен.
И я действительноне могу понять с чего бы это.Возможно, если это сработает, мне не следует задавать подобные вопросы, но мне действительно любопытно.Отладчик не мог четко ответить на мой вопрос.Я подозреваю, что это имеет какое-то отношение к console.log, как бы странно это не выглядело.
Здесь, в JS Bin