В течение функции $(document).ready
все ее локальные переменные активны и содержат свои значения, и любой код в этой функции или любых встроенных функциях может ссылаться на них.Хотя это можно описать как замыкание функции, это больше просто то, как локальные переменные работают в функции.
Если внутри $(document).ready
была встроенная функция, которая где-то сохраняла ссылку (например, щелчок мышью)обработчик), тогда будет установлено длительное закрытие функции, и значение readyVar
будет длиться столько же, сколько и любые встроенные ссылки.По сути это сборка мусора.Пока что-то вне цикла функции содержит ссылку на что-то внутри цикла, цикл остается в живых.В тот момент, когда цикл завершается, и ничто вне цикла не содержит ссылок на встроенные функции для вещей внутри цикла, цикл собирает мусор и удаляется.
Поскольку ссылки на встроенные функции отсутствуютТеперь он будет собирать мусор (например, уничтожать и освобождать), когда он завершит выполнение.
Теперь, если вы изменили его, добавив обработчик кликов, подобный этому, теперь у вас есть постоянная ссылка на функцию внутри функции $(document).ready
с функцией обработчика кликов.Поскольку он продолжается, даже после завершения цикла $(document).ready
он не будет собирать мусор и будет работать как закрытие функции.
$(document).ready(function() {
var readyVar = 0;
function innerFn() {
readyVar++;
$('#example-9').print('readyVar = ' + readyVar);
}
innerFn();
innerFn();
$("#content").click(function(){ // external reference to within this function
alert(readyVar);
});
});
По вашему вопросу я чувствую, что вы сбиваете с толкулокальные переменные с замыканиями функций.Два связаны, но не одно и то же.Локальные переменные всегда доступны для времени жизни функции.Время жизни функции - это время ее выполнения, за исключением случаев, когда ссылка на замыкание внутри нее приводит к тому, что она длится дольше.
Возможно, вы найдете это полезным: http://blog.morrisjohns.com/javascript_closures_for_dummies.html