JavaScript对象模型-执行模型(笔记4)

JavaScript中的闭包Closures
示例:

// Passed in FF2.0, IE7, Opera9.25, Safari3.0.4
function  outer(){
    
var  a = " aaa " ;
    
var  b = " bbb " ;
    
return   function (){  return  a  +   "   "   +  b; };
}
var  inner = outer();
document.write(inner());
outer返回的是一个内嵌函数,内嵌函数使用了outer的局部变量a和b。照理outer的局部变量在返回时就超出了作用域因此inner()调用无法使用才对。这就是闭包Closure,即函数调用返回了一个内嵌函数,而内嵌函数引用了外部函数的局部变量、参数等这些应当被关闭(Close)了的资源。

根据前面Scope Chain的理解可以解释,返回的内嵌函数已经持有了构造它时的Scope Chain,虽然outer返回导致这些对象超出了作用域、生存期范围,但JavaScript使用自动垃圾回收来释放对象内存: 按照规则定期检查,对象没有任何引用才被释放。因此上面的代码能够正确运行。

关于使用Closure时的内存泄漏、效率等问题,参考http://www.jibbering.com/faq/faq_notes/closures.html

你可能感兴趣的:(JavaScript,html)