Closures in ActionScript
On this page
Example: Closures in ActionScript
ActionScript supports anonymous functions, which can form closures. Anonymous functions are useful when you want to define a function inline without having to name it.
This function intSeq
returns another function, which we define anonymously in the body of intSeq
. The returned function closes over the variable i
to form a closure.
package {
import flash.display.Sprite;
import flash.text.TextField;
public class Main extends Sprite {
public function Main() {
var nextInt:Function = intSeq();
addChild(createTextField(nextInt())); // 1
addChild(createTextField(nextInt())); // 2
addChild(createTextField(nextInt())); // 3
var newInts:Function = intSeq();
addChild(createTextField(newInts())); // 1
}
private function intSeq():Function {
var i:int = 0;
return function():int {
i++;
return i;
};
}
private function createTextField(text:String):TextField {
var textField:TextField = new TextField();
textField.text = text;
return textField;
}
}
}
We call intSeq
, assigning the result (a function) to nextInt
. This function value captures its own i
value, which will be updated each time we call nextInt
.
See the effect of the closure by calling nextInt
a few times.
To confirm that the state is unique to that particular function, create and test a new one.
$ mxmlc Main.as && Main.swf
1
2
3
1
Now that we can utilize closures for stateful functions in ActionScript, let’s learn more about the language.