WEB开发网
开发学院网页设计JavaScript javascript必知必会之closure 阅读

javascript必知必会之closure

 2009-09-21 00:00:00 来源:WEB开发网   
核心提示:什么是closure一种定义是:A "closure" is an expression (typically a function) that can have free variables together with an environment that binds those variabl

什么是closure

一种定义是:

A "closure" is an expression (typically a function) that can have free variables together with an environment that binds those variables (that "closes" the expression).

我的理解是: closure 是一个表达式(通常是一个函数), 这个表达式与一个

环境 共享着一些自由变量, 而这个 环境 则 绑定 着那些自由变量(或者说 结束 这个表达式, 这也是所谓closure 的名字由来). 所谓的 环境 就是一个更大的block, 所有的自由变量在这个 block 中 声明(有意义). 而 绑定 也就是指这些自由变量的作用域就是这个环境.

举个简单的例子.

var flag = false;   //调试开关
// env 既是所谓的环境
// 而inner就是所谓的表达式, name即是所谓的自由变量
function env()  //整个env可以看作是一个closure
{
var name = "zhutao";
function inner()
{
return name + " is a student.";
}
return inner;   //返回的是一个内部函数
}//closure结束
flag = true;
if (flag)
{
// 此处是最神奇的地方, 代码执行在此处, inner函数其实已经出了env的body,
// 而仍然能够被引用, 这就是所谓形成了一个 closure
var inner_func_ref = env(); // 这时候inner_func_ref引用的就是inner()函数对象
alert(inner_func_ref());   // zhutao is a student.
}

而在上面的例子中, 函数env就是所谓的定义中的

环境, 函数inner就是定义中所谓的 表达式, 而name即是所谓的 自由变量, 绑定 在env这个 环境 中. env的结束也即closure的结束.

编缉推荐阅读以下文章

  • javascript必知必会之prototype

1 2 3 4  下一页

Tags:javascript closure

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接