![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
|
|||||
|
МЕГАФЛЭШЕР
Регистрация: May 1999
Адрес: Россия, Москва
Сообщений: 1,181
|
Нет, всетаки
если arguments.caller не null (функция вызвана функцией) короче Call Stack обратится к списку локальных переменных фунции и скопировать их значения var p = param; var internal = arguments.callee; полная чушь, ведь: ведь функция b не видит локальных переменных вызвавшей ее функции..... думаю ты прав, но все равно не хватает полной картины. видимо конструктор функции создает экземпляр функции в момент вызова функции в которой конструктор прописан как локальная переменная и создание внешней ссылки на конструктор, o["Nox"] = "Nox is right !";
o["john"] = "john is right !";
function external() {
var p = "Nox";
var internal = function (msg) {
var test = o[p];
trace(msg+" :: "+test);
};
internal()// при первом вызове вызывается конструктор функции "internal" и подствляет значени "Nox"
p = "john";
internal()// при втором вызове конструктора функции подставляется "john"
return internal; // подставилось "john"
}
getInternal = external("Nox");
getInternal("What's up ?!");
то есть когда мы создаем функцию внутри другой функции то создается "шаблон" и есть ссылка на него как локальная переменная, при вызове шаблона, создается функция, и только потом выполняется. поэтому можно создать несколько функций еще в теле главной функции, пример, 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 arguments.callee
};
return internal;
}
getInternal_1 = external("Nox");
getInternal_2 = external("john");
trace("функции равны? : "+(getInternal_1==getInternal_2))
как бы так, Последний раз редактировалось john; 26.04.2002 в 14:43. |
![]() |
Часовой пояс GMT +4, время: 17:52. |
|
|
« Предыдущая тема | Следующая тема » |
|
|