Переменная foo
присваивается результату самовыполняющейся функции, который выглядит следующим образом:
Объявляет переменную с именем x
, инициализированную в 0
.Возвращает функцию , которая при вызове будет увеличивать значение x
.
Так что в этот момент foo
ссылается на функцию .
Вы можете вызвать это следующим образом:
foo();
При первом вызове возвращается значение 0
, затем 1
, 2
...
Ну, , подождите минуту ... , не должно ли это быть 1
, 2
, 3
...?
Вы находитесь на правильном пути, но причина, по которой в данном случае это не является истинным, заключается в разнице между с предварительным увеличением и после увеличения ,(++var
против var++
).Разница в том, что результатом предварительного увеличения является значение переменной после увеличения, в то время как результатом последующего увеличения является значение переменной до увеличения .
Этот пример иллюстрирует концепцию замыканий , что по сути означает, что внутренние функции имеют доступ к переменным, определенным в их окружающих функциях.