Я практикую закрытие и сейчас моя задача:
Write a function
oncethat accepts a callback as input and returns a function. When the returned function is called the first time, it should call the callback and return that output. If it is called any additional times, instead of calling the callback again it will simply return the output value from the first time it was called.
Мой обратный вызов:
const addByX = function (num1) {
let number = num1;
function adding(num2) {
console.info(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.info(onceFunc(4)); //should log 6
console.info(onceFunc(10)); //should log 6
он возвращает мои значения, а также undefined.
И я действительно не могу понять, зачем это нужно. Может, если это сработает, мне не стоит задавать такие вопросы, но мне действительно любопытно. Отладчик не смог четко ответить на мой вопрос. Я подозреваю, что это как-то связано с console.info, каким бы странным он ни казался.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Функция addByX возвращает другую функцию, adding. Но adding ничего не возвращает; это просто журналы. Его возвращаемое значение не определено.
Я думаю, вы хотели, чтобы это выглядело так:
const addByX = function (num1) {
let number = num1;
function adding(num2) {
return number + num2;
}
return adding;
}
Итак, причина, по которой это «сработало», заключается в том, что обратный вызов печатал на консоли, а не там, где вы его вызываете.
Да, я в курсе :) Но я слышал, что это хорошая практика - переназначить ввод перед тем, как с ним работать.