до завтра я не дотерпел :))
знчт так, по порядку... (а то мало ли кто-то еще кроме нас это читает :D )
о чем спор:
– одна функция создает другую
– функция, которая создается зависит от параметра функции создающей
я утверждаю: во внутренней функции происходят подстановки значений на место параметра
в момент создания
ты утверждаешь: эти подстановки происходят
в момент выполнения
отуда я взял свое:

Код:
o["Nox"] = "Nox is right !";
o["john"] = "john is right !";
function external(param) {
var p = param;
var internal = function (msg) {
var test = o[p];
trace(msg+" :: "+test);
};
return internal;
}
getInternal = external("Nox");
getInternal("What's up ?!");
что делаем:
– создаем функцию и возвращаем на нее ссылку.
– вызываем ее:
поскольку внешняя функция закончила работу, то параметр param больше не существует => по твоей логике мы должны во время выполнения функции getInternal получить
var test = o[undefined]; , потому как переменную 'p' взять уже неоткуда, так ведь ?
....но вместо undefined мы получаем то, что нужно !
и все было бы замечательно, если бы не другой тест:

Код:
o["Nox"] = "Nox is right !";
o["john"] = "john is right !";
function external(param) {
var p = param;
var internal = function (msg) {
var test = o[p];
trace(msg+" :: "+test);
};
var p = "john";
return internal;
}
getInternal = external("Nox");
getInternal("What's up ?!");
эээ... либо я чего-то не понимаю, либо одно из двух:
мы меняем переменную уже _после_ объявления функции, а получаем....
ну, хорошо... есть ведь замычательная функция delete:
напишем
delete p; перед ретурном во внешней функции...
результат тот же, что и в первом варианте !
ладно, отвлечемся от главной темы - а работает ли делет, если его так использовать ?

Код:
function deleteTest(param) {
var testVar = param;
var backUp = param;
trace("thing to kill :: "+testVar);
delete testVar;
trace("is it deleted ?! :: "+((testVar != backUp) ? "YEAH" : "NO"));
}
deleteTest("delete me !");
ммм... не работает...
что-то я перестаю что-либо понимать...
скажи мне в чем сила, брат ? :))))