PDA

Просмотр полной версии : Область видимости переменной


ab1e
09.04.2010, 20:06
Всем привет!
Есть вот такой код:

var RegionsCount = 70;
var Regions:Array = new Array();

for (i=1; i<=RegionsCount; i++) {
Regions[i] = "Region #"+i;
}

for (i=1; i<= RegionsCount ; i++)
{
_root.logo_mc.rusmap['region'+i].onRollOver = function () {

_root.lefttoptext.text = _root.Regions[i];
}
}

в целом всё работает, но в строке

_root.lefttoptext.text = _root.Regions[i];

не видно переменную i
пробовал делать _root.i - не помогает.

mooncar
09.04.2010, 20:34
var RegionsCount = 70;
var Regions:Array = new Array();

for (i = 1; i <= RegionsCount; i++) {
Regions[i] = 'Region #' + i;
_root.logo_mc.rusmap['region' + i].num = i; //запомним номер внутри мувика
_root.logo_mc.rusmap['region' + i].onRollOver = regionRollOver; //назначим функцию-обработчик
}

function regionRollOver () {
var k:Number = this.num; //извлечем номер
_root.lefttoptext.text = _root.Regions[k];
}

Просто в вашем варианте в конце работы цикла i примет значение 71 (именно так), и именно это значение и будет использоваться для всех обработчиков.

AzagThoth
09.04.2010, 20:39
var RegionsCount = 70;
var Regions:Array = new Array();

for (i=1; i<=RegionsCount; i++) {
Regions[i] = "Region #"+i;
}

for (i=1; i<= RegionsCount ; i++)
{
_root.logo_mc.rusmap['region'+i].onRollOver = function (i:Number):Void {

_root.lefttoptext.text = _root.Regions[i];
}
}
Так попробуйте. Не проверял. Но в теории должно работать.

mooncar
09.04.2010, 20:43
Так попробуйте. Не проверял. Но в теории должно работать.
Ни по теории, ни как не должно.
Функция-обработчик onRollOver не имеет аргументов, кроме ссылки на сам объект, событие которого обрабатывается (т.е. this) и на саму себя.

AzagThoth
09.04.2010, 21:21
Да, Вы правы. Что то я потупил :) Сейчас проверил - действительно моё предложение сущий бред.
i=10;
clip.onRollOver=function(i):Void{
trace(i);
}
В отпут при наведении - undefined
А вот так:
clip.i=10;
clip.onRollOver=function():Void{
trace(this.i);
}
Всё как надо. Спасибо что указали на то, что НЕЛЬЗЯ передавать этой функции аргументы!