javascript基础之闭包

    闭包是不少语言都具有的特性,在js中,闭包主要涉及到js的几个其余的特性:做用域链,垃圾(内存)回收机制,函数嵌套,等等. 程序员

    在理解闭包之前.最好能先理解一下做用域链的含义,简单来讲,做用域链就是函数在定义的时候建立的,用于寻找使用到的变量的值的一个索引,而他内部的规则是,把函数自身的本地变量放在最前面,把自身的父级函数中的变量放在其次,把再高一级函数中的变量放在更后面,以此类推直至全局对象为止.当函数中须要查询一个变量的值的时候,js解释器会去做用域链去查找,从最前面的本地变量中先找,若是没有找到对应的变量,则到下一级的链上找,一旦找到了变量,则再也不继续.若是找到最后也没找到须要的变量,则解释器返回undefined. 闭包

var result=[];
function foo(){
    var i= 0;
    for (;i<3;i=i+1){
        result[i]=function(){
            alert(i)
        }
    }
};
foo();
result[0](); // 3
result[1](); // 3
result[2](); // 3



这段代码中,程序员但愿foo函数中的变量i被内部循环的函数使用,而且能分别得到他们的索引,而实际上,只能得到该变量最后保留的值,也就是说.闭包中所记录的自由变量,只是对这个变量的一个引用,而非变量的值,当这个变量被改变了,闭包里获取到的变量值,也会被改变。上述其实就是一个闭包。

闭包能够用在许多地方。它的最大用处有两个,个是前面提到的能够读取函数内部的变量,另外一个就是让这些变量的值始终保持在内存中 函数

相关文章
相关标签/搜索