大龙的博客

常用链接

统计

最新评论

函数闭包 --- 转

函数闭包”是一个对象,其中包含函数的快照及其“词汇环境”。函数的词汇环境包括函
数作用域链中的所有变量、属性、方法和对象以及它们的值。无论何时在对象或类之外的位
置执行函数,都会创建函数闭包函数闭包保留定义它们的作用域,这样,在将函数作为参
数或返回值传递给另一个作用域时,会产生有趣的结果。
例如,下面的代码创建两个函数: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 // 定义函数闭包
{
return x * y
}
return rectArea;
}
function bar():void
{
var x:int = 2;
var y:int = 4;
var myProduct:Function = foo();
trace(myProduct(4)); // 调用函数闭包
}
bar(); // 160
方法的行为与函数闭包类似,因为方法也保留有关创建它们的词汇环境的信息。当方法提取
自它的实例(这会创建绑定方法)时,此特征尤为突出。函数闭包与绑定方法之间的主要区
别在于,绑定方法中 this 关键字的值始终引用它最初附加到的实例,而函数闭包中 this 关
键字的值可以改变。

posted on 2009-10-10 09:52 大龙 阅读(441) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理