您的位置:首页 > Web前端 > JavaScript

JS 闭包

2015-09-09 13:16 579 查看
Js代码  


function outerFun()  

    {  

        var a=0;  

        function innerFun()  

        {  

            a++;  

            alert(a);  

        }                 

    }  

    innerFun()  

 上面的代码是错错误的.innerFun()的作用域在outerFun()内部,所在outerFun()外部调用它是错误的.

  伦理片 http://www.dotdy.com/

 

改成如下,也就是闭包:

Js代码  


function outerFun()  

{  

    var a=0;  

    function innerFun()  

    {  

        a++;  

        alert(a);  

    }  

    return innerFun;  //注意这里  

}  

var obj=outerFun();  

obj();  //结果为1  

obj();  //结果为2  

var obj2=outerFun();  

obj2();  //结果为1  

obj2();  //结果为2  

 

什么是闭包:

内部函数 在定义它的作用域 的外部 被引用时,就创建了该内部函数的闭包 ,如果内部函数引用了位于外部函数的变量,当外部函数调用完毕后,这些变量在内存不会被 释放,因为闭包需要它们.

 

 

--------------------------------------------------------------------------------------------------------

 

再来看一个例子

Js代码  


function outerFun()  

        {  

            var a =0;  

            alert(a);         

        }  

        var a=4;  

        outerFun();  

        alert(a);  

 结果是 0,4 .  因为在函数内部使用了var关键字 维护a的作用域在outFun()内部.

 

再看下面的代码:

Js代码  


function outerFun()  

{  

    //没有var   

    a =0;  

    alert(a);         

}  

var a=4;  

outerFun();  

alert(a);  

 结果为 0,0 真是奇怪,为什么呢?

 

作用域链是描述一种路径的术语,沿着该路径可以确定变量的值 .当执行a=0时,因为没有使用var关键字,因此赋值操作会沿着作用域链到var a=4;  并改变其值.

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: