闭包:将内部函数保存到外部时,将会生成闭包。闭包会导致原有的作用域链不释放,造成内存泄漏。
先来看一个闭包的例子
function a() { var num = 1; function b(){ num++; console.log(num); } return b; } var temp = a(); temp(); temp();
此时输出结果是2 和3,函数b和a形成了闭包,函数b被保存到外部。
function test() { var num = 100; function a(){ num++; console.log(num); } function b(){ num--; console.log(num); } return [a,b]; } var myArr = test(); myArr[0]();//101 myArr[1]();//100
函数a、b和test形成闭包,将函数a、b放在数组同时保存到test函数的外部。
function test(){ var arr = []; for(var i =0;i<10;i++){ arr[i] = function (){ console.log(i); } } return arr; } var myArr = test(); for(var j =0;j<10;j++){ myArr[j](); }输出结果为10个10,只不过控制台看的不是很清楚,可以改写成document.write(i),此时的i的作用域是test()函数,i的结果是10,当内部函数arr执行时输出的也是10.循环输出10次,所以是10个10.