Вы ничего не передаете, кроме самой функции (которая передается по ссылке).
То, что происходит, заключается в том, что функция создает замыкание вокруг переменной i
, изменяя ее время жизни.Когда вызывается анонимная функция, i
все еще находится в своей исходной области, но цикл уже завершен, оставляя i
в 3.
Таким образом, закрытие по существу сохраняет i
в областифункции даже после того, как первоначальное объявление функции завершилось.
Вместо того, чтобы закрывать переменную, вы хотели закрыть значение переменной переменной во время создания функции.Вы можете достичь этого с помощью промежуточной переменной, которая устанавливается только один раз перед закрытием:
for (var i:int = 0; i < 3; i++) {
var j = i; // New variable each time through the loop; closure will close over a different variable each time (that happens to have the same name)
var newChoice:MainButton = new MainButton(function(){
trace(this["func" + j])} );
}