函数闭包

函数闭包
是直接写在包里的函数,包里没有类,只有函数,这样的函数叫函数闭包
函数在类里出现通常叫方法,


http://help.adobe.com/zh_CN/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f54.html
函数闭包 是一个对象,其中包含函数的快照及其“词汇环境”。函数的词汇环境包括函数范围链中的所有变量、属性、方法和对象以及它们的值。无论何时在对象或类之外的位置执行函数,都会创建函数闭包。函数闭包保留定义它们的作用域,这样,在将函数作为参数或返回值传递给另一个作用域时,会产生有趣的结果。

例如,下面的代码创建两个函数:foo()(返回一个用来计算矩形面积的嵌套函数 rectArea())和 bar()(调用 foo() 并将返回的函数闭包存储在名为 myProduct 的变量中)。即使 bar() 函数定义了自己的局部变量 x(值为 2),当调用函数闭包 myProduct() 时,该函数闭包仍保留在函数 foo() 中定义的变量 x(值为 40)。因此,bar() 函数会返回值 160,而不是 8。

function foo():Function
{
   var x:int = 40;
   function rectArea(y:int):int // function closure defined
   {
       return x * y
   }  
   return rectArea;
}
function bar():void
{
   var x:int = 2;
   var y:int = 4;
   var myProduct:Function = foo();
   trace(myProduct(4)); // function closure called
}
bar(); // 160

方法的行为与函数闭包类似,因为方法也保留有关创建它们的词汇环境的信息。当方法提取自它的实例(这会创建绑定方法)时,此特征尤为突出。函数闭包与绑定方法之间的主要区别在于,绑定方法中 this 关键字的值始终引用它最初附加到的实例,而函数闭包中 this 关键字的值可以改变。有关详细信息,请参阅方法。

你可能感兴趣的:(函数闭包)