首页 > Web开发 > 详细

javascript中闭包的概念

时间:2014-02-13 09:31:04      阅读:321      评论:0      收藏:0      [点我收藏+]

这个是每个前端工程师绕不开的一个问题,网上各种资料很多,整个春节,我仔细研读了红皮经典中关于这一块的注释,加深了对这一块的理解。

有好几个概念需要重申一下。以下都是我的理解:

1. 闭包是javascript中的一种程序结构,可以访问函数内部所有的变量。

2. 闭包的作用,以一个函数为例:

bubuko.com,布布扣
function a(){
    var i = 0;
    function b(){
        alert(++i);
    }
    return b; 
}

var c = a();
bubuko.com,布布扣

闭包的作用:a执行完并返回后,闭包将使得Javascript的垃圾回收机制不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。

如果a返回的不是一个函数而是其他的某一个值,情况就不一样了。a执行完后,b并不会被外部引用,会一起被GC回收。

3. 闭包的内部细微情况:

  这里涉及到了好几个概念,我根据自己的理解记一下。

  函数在每次执行的时候,会创建一个执行环境,在这个环境中,函数会将自己的作用域链存在函数的scope属性中。

  然后,函数会用this arguments 参数来初始化自身的活动对象。scope[0]=>函数内部的活动对象,scope[1]=>函数外部的活动对象,scope[2]=>外部的外部活动对象....一直到作用域链的终点:全局执行环境。

  正是因为闭包中保存的是活动对象---整个变量对象,而不是某个特殊的变量,因此,闭包只能保存函数中任何变量的最后一个值。

  又到了展示经典代码的时刻

bubuko.com,布布扣
function test(){
    var result = [];
    for(var i=0; i<10; i++){
        result[i] = function(){
            return i;
        }
    }
    return result;       
}

var arr = test();
for(var i=0; i<arr.length; i++){
    console.log(arr[i]());
}
bubuko.com,布布扣

类似的例子很多,比如onclick例子,等等,这里是从经典红书中借鉴的例子。

---太晚了,还没洗脸,先去洗个美容脸,再接着写。

javascript中闭包的概念

原文:http://www.cnblogs.com/lxin/p/3546738.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!