Показать сообщение отдельно
Старый 26.04.2002, 01:27
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 8  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
до завтра я не дотерпел :))

знчт так, по порядку... (а то мало ли кто-то еще кроме нас это читает :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 !");
ммм... не работает...

что-то я перестаю что-либо понимать...

скажи мне в чем сила, брат ? :))))