整理下对闭包的理解
这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_();
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