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 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
Tags:javascript closure
编辑录入:爽爽 [复制链接] [打 印]赞助商链接