JavaScript闭包

闭包

闭包(closure)是JavaScript语言的一个难点,也是其一大特色,很多高级的应用需要闭包的实现。
要理解闭包,首先就得了解变量作用域。在JavaScript中有两种作用域,一种是全局作用域,另一种是函数作用域。在函数的内部可以读取全局变量。

var n = 999;
function f1 (){
    alert(n);
}
f1();    //999

另一方面,在函数外部自然无法读取函数内的局部变量。

function f1(){
    var n = 999;
}
alert(n);    //error

注意:函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上就声明了一个全局变量。

如何从外部读取局部变量?
出于种种原因,我们有时候需要得到高数内部的局部变量。但是,在正常情况下是办不到的,因此需要在函数内部再定义一个函数。

function f1(){
    var n = 999;
    function f2(){
        alert(n);
    }
return f2();
}
var result = f1();
result();    //999

上面的代码中函数f2 ()在函数f1 ()中,因此函数f2 ()可以访问到f1 ()的变量n。反过来则不可以,f1 ()不能访问到f2 ()中的局部变量。
这就是JavaScript中特有的"链式作用域"结构(chian scope),子对象会一级一级地向上寻找父对象的变量。因此,父对象的所有变量对子对象是可见的,反之不行。
未完待续。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 一、变量...
    zouCode阅读 5,051评论 0 13
  • 前言 这篇文章使用有效的javascript代码向程序员们解释了闭包,大牛和功能型程序员请自行忽略。 基础篇 闭包...
    kiaizi阅读 2,849评论 0 7
  • 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 下面就是...
    鲁uin阅读 2,394评论 0 2
  • 在你来前 我先做一个夫君 一个有爱心而温暖的人 在你到时 我洗净一身浮华 为你筑安宁又平和的巢 知道你会来 我等待...
    李炫成阅读 1,112评论 0 1
  • 旧山旧水旧城池,忆是忆非忆故人。 风微过,片片梨白入尘,阵阵梨香扑鼻。身着大华红袍的娇颜女子在梨树下轻喃:“原已是...
    susansan1103阅读 2,087评论 1 1

友情链接更多精彩内容