为什么会形成闭包呢?
当内部函数被保存到外部的时候,就会生成闭包。也就是说,当有函数嵌套时,里面的函数被保存到全局,就会产生闭包。
闭包带来的影响
导致原有作用域链不释放,造成内存泄漏(其实是指由于产生闭包,导致内存被占用,可用的内存减少了,可以看作是内存泄漏)。
闭包的作用
- 实现共有变量
- 可以做缓存
- 可以实现封装,属性私有化
- 模块化开发,防止污染全局变量
有一个下面的这种例子,我觉得是非常经典滴闭包问题了。
function test(){
var arr = [];
for(var i = 0;i < 10;i++){
//最终的函数体里面i变为10
arr[i] = function(){
document.write(i + " ");
}
return arr;
}
var myArr = test();
for(var j = 0; j < 10; j++){
myArr[j]();
}
第一次看到这个题,可能很多人都会和我一样,以为最后的输出结果会是:0123456789,然而结果是直接输出10个10.
所以产生这种问题的原因就是因为闭包,在test函数里面,把arr的结果保存了起来,当在外部再进行调用时,i已经变成了10。解决这种问题可以使用立即执行函数的方式。