Просмотр полной версии : for: видимость переменной цикла.
Fogflasher
07.10.2013, 09:51
Скажите, а почему, например, вот в этом коде:
package
{
import flash.display.Sprite;
public class Main extends Sprite
{
public function Main()
{
for(var i:uint = 0; i <= 10; i++)
{
trace("i = ", i);
}
trace("-----------------------");
for (i = 15; i <= 25; i++)
{
trace("i = ", i);
}
}
}
}
Второй цикл работает?
Ведь переменная функции for - это же локальная переменная? Она должна быть видна только в теле данного for.
А получается, что она видна и в теле другого for, в чем причина?
ActionScript variables, unlike variables in C++ and Java, do not have block-level scope. (http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f9d.html)
Код который Вы написали на самом деле выглядит как то так:
public function Main()
{
var i:uint = 0;
for(i = 0; i <= 10; i++)
{
trace("i = ", i);
}
trace("-----------------------");
for (i = 15; i <= 25; i++)
{
trace("i = ", i);
}
}
alexcon314
07.10.2013, 10:21
Не совсем так. При входе в цикл выполняется конструкция
var i:uint = 0;
А она объявляет переменную в пределах области видимости функции Main(), не в теле цикла. Это все равно, как если бы вы написали
var i:uint = 0;
for(i = 0; i <= 10; i++)
{
trace("i = ", i);
}
Так уж устроен компилятор.
Fogflasher
07.10.2013, 11:01
Inet_PC, ...do not have block-level scope
Аа, вот оно что, спасибо.
Просмотрел статью, то есть, похоже на то, что видимость любой системная переменной AS3.0 "поднимается" до уровня границ текущего метода данного класса, но не выше. В других методах она уже не видна, походу.
alexcon314, не совсем понимаю, чем ваш пример отличается от примера Inet_PC
alexcon314
07.10.2013, 11:09
Я не видел ответ Inet_PC, когда постил свой.
for(i = 0; i <= 10; i++)
{
trace("i = ", i);
}
trace("-----------------------");
for (i = 15; i <= 25; i++)
{
trace("i = ", i);
}
var i:int = 0;
Можно и так написать, работать будет)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.