К сожалению, AS2 не такой язык; у него нет такого закрытия. Функции не являются первоклассными гражданами в AS2, и одним из результатов этого является то, что функция не сохраняет свою собственную область, она должна быть связана с некоторой областью, когда она вызывается (обычно это та же область, где функция само по себе определено, если только вы не используете методы call
или apply
).
Затем, когда функция выполняется, область видимости переменных внутри нее - это просто область, где бы она ни вызывалась, - в вашем случае, область за пределами вашего цикла. Вот почему вы можете делать такие вещи:
function foo() {
trace( this.value );
}
objA = { value:"A" };
objB = { value:"B" };
foo.apply( objA ); // A
foo.apply( objB ); // B
objA.foo = foo;
objB.foo = foo;
objA.foo(); // A
objB.foo(); // B
Если вы привыкли к настоящим ОО-языкам, это выглядит очень странно, и причина в том, что AS2 в конечном итоге является прототипированным языком . Все, что выглядит объектно-ориентированным, просто совпадение. ; D