日期:2014-05-16 浏览次数:20431 次
JavaScript中的闭包Closures
示例:
function?outer(){
????var?a="aaa";
????var?b="bbb";
????return?function(){?return?a?+?"?"?+?b;?};
}
var?inner=outer();
document.write(inner());
根据前面Scope Chain的理解可以解释,返回的内嵌函数已经持有了构造它时的Scope Chain,虽然outer返回导致这些对象超出了作用域、生存期范围,但JavaScript使用自动垃圾回收来释放对象内存: 按照规则定期检查,对象没有任何引用才被释放。因此上面的代码能够正确运行。
关于使用Closure时的内存泄漏、效率等问题,参考http://www.jibbering.com/faq/faq_notes/closures.html