js闭包立即执地函数问题集锦
当内部函数保存到外部时,将会生成闭包。闭包会导致原有作用域链不释放,造成内存泄露
闭包的作用
实现公有变量
想打印0到9
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>演示代码</title> <script> function test() { var arr = []; for (var i = 0; i < 10; i++) { arr[i] = function () { document.write(i+""); } } return arr; } var myArr = test(); for (var j = 0; j < 10; j++) { myArr[j](); } </script> </head> <body> </body> </html>
结果是10101010101010101010
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>RunJS 演示代码</title> <style> div { width: 30px; border: 1px solid #fd3; float: left; } </style> <script> function test() { var arr = []; for (var i = 0; i < 10; i++) { (function (j) { arr[j] = function () { document.write(j+"");
} }(i)); } return arr; } var myArr = test(); for (var j = 0; j < 10; j++) { myArr[j](); } </script> </head> <body> </body> </html>
结果是0123456789
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title></title> <script> function a() { function b() { var bbb = 234; document.write(aaa); } var aaa = 123; return b; } var glob = 100; var demo = a(); demo(); </script> </head> <body> </body> </html>
结果是:123
1 <script> 2 function a() { 3 var num = 100; 4 function b() { 5 num++; 6 console.log(num); 7 } 8 return b; 9 } 10 var demo = a(); 11 demo(); 12 demo(); 13 </script>
结果是:101 102