function1(function2);
Note that if there are no parentheses following
function2, the interpreter doesn't execute
function2( ) but instead just passes its
"object reference" as an argument to function1(
). That is, function1( ) receives
function2 itself, not the return value of
function2( ). Because objects are passed by
reference, we can pass a function identifier to another function and
it will arrive unscathed. The passed function can be executed like
this:
function doCommand(command) {
command( ); // Executes the passed function
}
// Some examples:
doCommand(stop); // Pass the internal stop( ) function (stops the current movie)
doCommand(play); // Pass the internal play( ) function (plays the current movie)
Because functions are a type of object, we may treat them like any
other data. In the following example, we assign the internal
gotoAndPlay function to the variable
gp, which gives us a shorter way to refer to the
function:
gp = gotoAndPlay; // Create a shortcut reference to gotoAndPlay( )
gp(25); // Invoke gotoAndPlay( ) using our reference
TIP
By attaching properties to functions, we can maintain the state of a
piece of information between function executions without cluttering
up a timeline with variables.
Function properties offer the benefits of local variables without
expiring between function invocations. This is useful when a function
needs to be invoked with a unique identifier. Here, for example, is a
generic function that duplicates a movie clip and gives the
duplicated clip a unique name and level:
makeClip.count = 0; // Define a property of makeClip( ) (remember that
// makeClip( ) already exists because functions are
// defined before code runs)
// Duplicate a passed clip and assign the new clip an automatic name
function makeClip (theClip) {
// Add one to our clip counter
makeClip.count++
// Now duplicate the clip, assigning it a unique name and depth
theClip.duplicateMovieClip(theClip._name + makeClip.count, makeClip.count);
}
makeClip(square); // Make a duplicate of square using makeClip( )
square1._x += 100; // Now move the duplicated square to the right