JavaScript 闭包解析

闭包的本质就是:函数A的内部函数B被A以外的函数C调用了。这样一个闭包的函数在返回时有没有释放资源的栈区。 闭包

了解js的闭包首先要清楚变量做用域的问题函数

function demo01(){
     var index = 1;
}
demo01(); 
alert(index) //  不会弹出结果 index的做用域在demo01函数内部 
function demo02(){
     index = 2

demo02();
alert(index) 
// 会弹出2 由于在函数内部声明变量时没有用var,因此其实index是全局变量,全局变量与某个函数的生命周期无关。

 那么想要从外部获取内部的变量值该如何作呢?spa

咱们能够在demo02中定义一个内部函数:code

function  demo02(){  

    var index02 = 3;
    function inner02(){
        alert(index02);
    }
    return inner02;
}
var getnum = demo02();//至关于获取到了inner02
getnum();//弹出结果3对象

 inner02就是闭包。blog

// 闭包使得index03变量一直存在内存中
//
index03在函数demo03执行完毕后依然存在
function demo03(){
     var index03 = 99;  

    addone=function(){
     index03++;
    }
    function inner03(){
     alert(index03);
    }
    return inner03;
}
var getnum = demo03();
getnum();//弹出结果99
addone();//index03的值增长1  addone自己是全局变量它的值是一个匿名函数,而匿名函数自己也是闭包,能够在函数外部对函数内部的变量进行操做。
getnum();//弹出结果100生命周期

 因此滥用闭包可能致使内存泄露,由于闭包使得变量一直在内存中不会被垃圾回收。内存

若是把demo03当作对象,index03表明属性,inner03表明公开的方法,也要注意不要随便修改内部的属性值。 资源

相关文章
相关标签/搜索