У меня есть следующий код:
function doStuff() {
var increaseNumber = 0;
function doSomeStuff() {
console.log(++increaseNumber);
}
return doSomeStuff();
};
doStuff();
Когда функция «doStuff» выполняется, функция «doSomeStuff», которая находится внутри функции «doStuff», запускается через «return doSomeStuff ()» и увеличиваетсяпеременная «IncreaseNumber» на 1 каждый раз, когда она вызывается.Если я изменю «return doSomeStuff ();» на «return doSomeStuff;», вызов «doStuff» через «doStuff ()» не будет работать, как я предполагаю.
Кроме того, у меня есть следующеекод, который дает тот же результат, что и предыдущий код:
var doStuff = (function () {
var increaseNumber = 0;
function doSomeStuff() {
console.log(++increaseNumber);
}
return doSomeStuff;
})();
doStuff();
В этом коде IIFE хранится внутри переменной «doStuff».Внутри IIFE функция doSomeStuff хранится и, по-видимому, запускается с помощью return doSomeStuff и увеличивает переменную увеличивается на 1 каждый раз, когда вызывается с помощью doStuff (). Когда я меняю «return doSomeStuff;» на «return doSomeStuff ();», код больше не работает так, как изложено.
Когда:
return doSomeStuff();
})();
//doStuff();
IIFE и «doSomeStuff» выполняются один раз, а IncreaseNumber = 1. Дальнейший вызов IIFE через «doStuff ()» не работает из-за ошибки: «Ошибка JavaScript: doStuff не является функцией».
В основном я не понимаю здесь две вещи:
- Почему код работает, когда «return doSomeStuff;».Я не вижу, как эта функция запуска «doSomeStuff», так как () отсутствует.Когда я вызываю функцию, я обязательно добавляю ().Вот как я это узнал.
- ВЫШЕ ВСЕ: Почему я не могу вызвать «doStuff» как функцию, когда меняю «return doSomeStuff;» на «return doSomeStuff ();»?
Вы заметите, что я все еще новичок в Javascript.Я надеюсь, что я не повторяю здесь вопрос (честно говоря, я не смог найти в поиске или в Google ничего, что могло бы ответить на мой запрос).
Спасибо миллион за любые подсказки.