История изменений
Исправление Xintrea, (текущая версия) :
Нет. У тебя существует одна копия переменной.
Нет.
Смысл замыкания в том, что оно захватывает (использует) внешний контекст, не давая ему уничтожиться (переменная х не уничтожится при выходе из square, как обычно, а будет существовать пока существует захватившее ее замыкание).
Везде встречаю именно эту формулировку, но она ничего не объясняет а только запутывает еще больше.
В этой фразе нигде не сказано, что при каждом вызове square() переменная x создается. А значит, при первом вызове создастся x в одном месте памяти, при втором вызове - в другом месте памяти.
При обычной работе функции square() переменная x будет уничтожена в конце работы функции. А если произойдет захват этой переменной через замыкание - то будет удалена когда прекратит существование само замыкание.
В любом случае, повторный вызов square() генерирует повторное создание переменной, и получить доступ к предыдущей переменной невозможно (если не оформить переменную как static или как там это делается в Goшечке).
Исправление Xintrea, :
Нет. У тебя существует одна копия переменной.
Нет.
Смысл замыкания в том, что оно захватывает (использует) внешний контекст, не давая ему уничтожиться (переменная х не уничтожится при выходе из square, как обычно, а будет существовать пока существует захватившее ее замыкание).
Везде встречаю именно эту формулировку, но она ничего не объясняет а только запутывает еще больше.
В этой фразе нигде не сказано, что при каждом вызове square() переменная x создается. А значит, при первом вызове создастся x в одном месте памяти, при втором вызове - в другом месте памяти.
При обычной работе функции square() переменная x будет уничтожена в конце работы функции. А если произойдет захват этой переменной через замыкание - то будет удалена когда прекратит существование само замыкание.
В любом случае, через повторный вызов square() генерирует повторное создание переменной, и получить доступ к предыдущей переменной невозможно (если не оформить переменную как static или как там это делается в Goшечке).
Исходная версия Xintrea, :
Нет. У тебя существует одна копия переменной.
Нет.
Смысл замыкания в том, что оно захватывает (использует) внешний контекст, не давая ему уничтожиться (переменная х не уничтожится при выходе из square, как обычно, а будет существовать пока существует захватившее ее замыкание).
Везде встречаю именно эту формулировку, но она ничего не объясняет а только запутывает еще больше.
В этой фразе нигде не сказано, что при каждом вызове square() переменная x создается. А значит, при первом вызове создастся x в одном месте памяти, при втором вызове - в другом месте памяти.
При обычной работе функции square() переменная x будет уничтожена в конце работы функции, а если произойдет захват этой переменной через замыкание - то будет удалена когда прекратит существование само замыкание.
В любом случае, через повторный вызов square() генерирует повторное создание переменной, и получить доступ к предыдущей переменной невозможно (если не оформить переменную как static или как там это делается в Goшечке).