javascript必知必会之closure

  摘要

  本系列博文主要谈一些在 Javascript 使用中经常会混淆的高级应用,包括: prototype, closure, scope, this关键字. 对于一个需要提高自己Javascript水平的程序员,这些都是必须要掌握的.本节主要介绍closure.

  什么是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.
}

it知识库javascript必知必会之closure,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。