От этого примера мне даже поплохело...Прямо затмение на меня нашло. Давненько я не была в такой растерянности, да еще от столь простенького примера :-( Показательно, что в этом примере оба обработчика формируются в момент onload, так что ПО МОИМ ПРОШЛЫМ ПРЕДСТАВЛЕНИЯМ переменная temp, к моменту кликанья мышкой, вроде бы уже и не должна существовать, ибо определена в блоке функции, которая к тому моменту давно выполнилась. И это ожидание в полной мере подтвердилось вызовом первого обработчика (там где new Function): переменная temp не обнаруживается и выдается сообщение об ошибке на странице. Но когда я увидела, что второй обработчик по-прежнему "помнит" не только саму переменную temp, но и ее значение - я удивилась, но сперва не сильно. Решив, что наверное тело функции подверглось "компиляции" и потому я вижу то значение, которое было в тот момент. И какова была моя растеряность, когда модифицировав код таким образом : { var temp=2; .... b2.onclick=function(){alert(temp++)} } я увидела невероятное! - Давным давно "умершая" переменная temp, при каждом клике исправно инкриментировалась на единичку! Выходило, что я преждевременно отпевала эту переменную. Она не только где-то живет, но и продолжает исправно выполнять свою роль, сохраняя в себе положенные в нее значения. Из всего этого у меня сложилось впечатление, что все порождаемые в программе переменные вроде как неуничтожимы! А "неощущаются" лишь потому, что становятся невидимыми в другом контексте. Потому что вызов любой функции, определенной в том или ином контексте приводит к активизации того контекста (переменных), в котором они были определены. И при каждом вызове такой функции, ее тело обрабатывается именно в этом же самом контексте (окружении). В то время как, тело функции, порождаемое из стринга объектом new Function("стринг"), повидимому воспринимается в том контексте, который существует в момент ВЫЗОВА такой функции, а не того контекста, в котором этот объект создавался. Честно говоря даже не могу сказать твердо, сработал ли оператор new, породив объект Function с момент присвоения b1.onclick=new Function("alert(temp)"); или же его создание происходит в момент клика... Чувствую, что что-то здесь я недопоняла... Может найдется кто-то, кто бы мог растолковать яснее? ---- Pipa |