函数闭包
- 函数就是闭包,当一个函数被创建时,它的内部的语句、变量、函数等,共同形成了闭包。
这里简单分析下闭包函数执行调用过程
function outer(){ var a = 12; //形成闭包环境中的变量不是一成不变的,可以被更改 function inner(){ console.log(a ++); } return inner; } var inn = outer(); inn(); inn();
闭包的用途:
可以在函数外部读取函数内部成员
让函数内成员始终存活在内存中
闭包存在的问题
//闭包的问题 var arr = []; for(var i = 0;i <= 10;i ++){ arr[i] = function (){ console.log(i); } } //应该是输出对应下标 arr[0]();//11 arr[1]();//11 arr[2]();//11</pre>
这个代码只是想实现根据arr下标,console.log出相应的值。但是当调用时,for循环中的i已经执行完了,i = 11。i的作用域太大了,执行时,i的结果就已经执行完了。
解决方法就是形成一个闭包,将i的作用域从全局缩小变成局部作用域,arr[i]()每执行一次,i的值就执行一次,使i的值依旧可以使用。
//解决 var arr = []; for (var i = 0; i <= 10; i++) { //自调用函数 (function (i){ arr[i] = function () { console.log(i); } })(i); } //应该是输出对应下标 arr[0]();//0 arr[1]();//1 arr[2]();//2