У меня есть пара вопросов об обработке переменных AS3 с помощью AVM / compiler / scope
0,1. Этот код во Flash выдаст ошибку:
<code>function myFunction() {
var mc:MovieClip=new MovieClip();
var mc:MovieClip=new MovieClip();
}
но это не вызовет ошибку во Flex (только предупреждение в редакторе). Почему?
0,2. Как Flash видит переменные в циклах? Видимо это:
<code>for (var i:int=0; i<2; i++) {
var mc:MovieClip=new MovieClip();
}
не равно просто:
var mc:MovieClip=new MovieClip();
var mc:MovieClip=new MovieClip();
, потому что это вызовет ошибку снова, как раньше в Flash, но во Flex в функции нет? Flash как-то меняет мой цикл перед компиляцией?
0,3. Где в классе, эквивалентном временной шкале во Flash - где в классе я бы поместил код, который я обычно помещаю на временной шкале (я предполагаю, что это не конструктор из-за того, что я написал ранее, или, возможно, дело в компиляторе Flash / Flex )
@ fenomas спасибо за объяснение, но я проверил 1. ответ, и это не совсем верно :) этот код:
function myFunction() {
var mc:MovieClip=new MovieClip();
mc.graphics.beginFill(0x0000FF);
mc.graphics.drawRect(0,0,100,100);
mc.graphics.endFill();
addChild(mc);
var mc:MovieClip=new MovieClip();
mc.graphics.beginFill(0x000000);
mc.graphics.drawRect(0,0,30,30);
mc.graphics.endFill();
addChild(mc);
}
myFunction();
будет компилироваться во Flash в строгом режиме, но с отключенным режимом предупреждения и не будет выдавать ошибку во время компиляции или выполнения.
И он также будет хорошо компилироваться и выполняться во Flex (событие с командами компилятора -strict -warnings) (проверено с помощью Flash CS3 и FlashBuilder 4).
Тот же код, но не включенный в функцию, будет генерировать ошибку времени компиляции независимо от того, включены ли какие-либо режимы ошибок (строго / предупреждение) во Flash.
Это то, что @ back2dos сказал о Flash Compiler, который ведет себя странно?
В чем различия между этими двумя компиляторами Flash / Flex (почему я должен менять режим ошибок во Flash, а Flex ни о чем не заботится :))?