PDA

Просмотр полной версии : область видимости переменных в функции


Марк
13.12.2005, 18:41
Привожу пример :


ceff = "normal";
function Effects(effects,ceff) {
if (effects["burn"]["time"]>0) {
ceff = "burn";
trace(ceff);
this.en.fx.gotoAndStop(ceff);
effects["burn"]["time"]--;
} else {
this.en.fx.gotoAndStop(1);
}
_root.q4 = ceff;
}

Почему массив effects изменяется, а переменная ceff - нет ??
При trace выводится значение burn, а переменной q4 присваивается значение "normal", которое я определил еще до начала функции - почему ???

Получается в 1й части функции у переменной 1 значение, а в другой - другое, при том что ее нието не изменял ...

s_u_m_p
13.12.2005, 20:03
это не вопрос по видимости.

в функцию:

* объекты передаются всегда по ссылке.
* примитивы по значению

насчет объектов:

var a:Object = new Object ();
var b:Object = a;

не означает что переменная а, и есть объект. в данном случае а и б cсылаются на один и тот же объект, и если ты удалишь обе ссылки


delete a;
delete b;

ты удалишь не сам объект а только с ссылки на него, (объект удаляет только Garbage Collector если на него никто не ссылается)

Antares
13.12.2005, 21:06
Nox Noctis об областях видимости (http://www.novemberain.com/blog/?p=112) @ Novemberain.com. По-моему, не понять невозможно

Марк
13.12.2005, 22:06
еще такой вопрос :

У меня есть мувиклип par, а в нем находится еще 1 мувиклип - ins. Я копирую мувиклип par. Если в одной из копий объекта ins я обращусь к объекту par по относительному пути : this._parent.s = 1, значение переменной s присвоится во всех копиях объекта par или только в той, из которой было обращение ?