Почему не работает?
День добрый. Подскажите, почему данный код не работает?
function makeCounter() { var currentCount = 1; (function() { currentCount++; })(); return currentCount; } var counter = makeCounter(); alert (typeof counter); alert( counter() );// выводит 2 alert( counter() );// выводит 2 Значение в currentCount не запоминается, почему? |
Rora,
function makeCounter() { var currentCount = 1; return function() { return currentCount++; }; } var counter = makeCounter(); alert (typeof counter); alert( counter() );// выводит 1 alert( counter() );// выводит 2 alert( counter() );// выводит 3 |
я знаю что так сработает, вопрос, почему не работает та как я написал..?
|
Rora,
вы написали function makeCounter() { return 2 } |
Эм, я пытаюсь разобраться с замыканиями. И тот шедевр с которого начался пост, был эксперимент на тему... Работать данное изваяние должно было так -же как код который предложили вы, но не сложилось, и я не понимаю почему. Инкремент работает. Но, такое впечатление, что я постоянно создаю новый counter. Или поскольку я возвращаю число так и есть?
|
Rora,
потому что нет никакого замыкания, ваша функция в посте№1 и в посте №4 одинаковы. |
рони,
Я уже начал об этом догадываться. Спасибо. Перечитаю перечитанное еще раз. |
Цитата:
А неправильные ожидания имхо от того что ты учишься по неправильной книжке где плохо объясняют когда и для каких функций создаются замыкания а когда не создаются. Неплохое объяснение https://www.youtube.com/watch?v=rpIxGwFz0Xs |
Часовой пояс GMT +3, время: 13:07. |