整理下对闭包的理解

这2天陆陆续续看了关于JS闭包的文章,但似乎一直对其有种摸不透的感觉,现整理下对其的理解。

《Learning jQuery》中对闭包的解释是:当内部函数在定义它的作用域的外部被引用时,就创建了该内部函数的一个闭包。(内部函数其实就相当于function中的function).

举一个例子如下:

 

代码
        function out_(){
            
var i = 1 ;
            
function in_(){
                alert(i
++);
                }
                
return in_;
            }
            
var globl = out_();
            globl();
            globl();
            
var globl_ = out_();
            globl_();
            globl_();

 

在此,in_()就是一个内部函数,它的作用仅仅是弹出警示框。

在out_()中,最后返回了一个对in_()的引用,而且这个引用可以保存在globl中,执行globl()时调用了in_(),这就是一个所谓的闭包。

也就是说,out_()的内部函数in_()被out_()外的一个变量引用的时候(这里,这个变量时globl),就创建了一个该内部函数的闭包(这里为创建了一个in_()的闭包)。

闭包可以允许内部函数可以引用存在于包围它的函数内的变量,即便外层函数已经终止(在这里in_()引用了来自out_()中的变量i),这个特性非常强大和复杂。(强大在哪现在还没能理解...)

以后慢慢理解吧....这里还有一篇文章...

http://www.felixwoo.com/archives/247

 

posted @ 2009-12-17 15:56  Tmac_  阅读(135)  评论(0编辑  收藏  举报