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

javascript必知必会之closure

 2009-09-21 00:00:00 来源:WEB开发网   
核心提示: 而在javascript中,如果内部函数出了自己的所在的外部函数的body仍然能够引用,则会形成所谓的closure.在具体了解closure之前,我们需要了解一些其它的知识.执行空间(执行上下文, Execution Context) 在 javascript 中,每行可执行的代码都具有一定的

而在javascript中,如果内部函数出了自己的所在的外部函数的body仍然能够引用,则会形成所谓的closure.

在具体了解closure之前,我们需要了解一些其它的知识.

执行空间(执行上下文, Execution Context)

在 javascript 中,每行可执行的代码都具有一定的 执行空间, 如全局的执行空间, 函数的执行空间, 递归后的函数执行空间等. 而一个完整的 javascript 执行过程,可以看作是有一个执行空间栈 ,不断地 进行 执行空间 的变化(出栈,进栈).

这个是很重要的概念,这个概念的理解与本系列的将要完成的另一篇文章 this关键字 的理解也是密切相关的.

详细解释请参考即将完成的 this关键字 的博文.

执行空间可以理解为具有属性的对象集, 但是通常这些属性都不是可随意访问的, 而这些对象集为代码的执行 提供了一定的上下文(空间).

当执行到一个函数时, 会建立此函数的执行空间(所谓进栈), 执行结束了, 从此执行空间退出返回到原来的执行空间(所谓 的出栈),而js解释器在运行过程中一起维护着这样一个 执行空间栈 来为不同的代码提供不同的执行空间.

那么执行空间与closure有什么关系?

简单地说,一定的执行空间对应着一定的closure, 只有位于同一个closure的方法才能访问同一closure的变量.

举个简单的例子:

// 关于context的例子
flag = true;
var tmpobj = {
name : "zhutao",
func : function(){
return "call by func " + this.name;
}
};
if (flag)
{
// 代码执行在此处时context还是global
alert(tmpobj.name);
alert(tmpobj.func());   //进入func的context
// 回到global的context
}

编缉推荐阅读以下文章

  • javascript必知必会之prototype

上一页  1 2 3 4  下一页

Tags:javascript closure

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