JavaScript的回收机制
- 浏览器自己做。
- 全局作用域声明一个变量不会被回收,只有关闭浏览器之后才回收。
-
在局部作用域里面,变量在函数体执行完之后,就会被回收。
<script> function func(){ var x = 1; console.log(x); // 变量x在函数执行完毕后,会被回收 }; func(); // 1 console.log(x); // x is not defined </script>
闭包
-
可以访问其他函数作用域里变量或者参数的函数(闭包会造成局部变量不被销毁)。
<script> (function(){ var x = 1; console.log(x) })();//这不是一个闭包,这只是一个函数表达式的自执行 function fn(){ var y = 2; return y; //可以获取内部函数的变量,但不是闭包 }; var b = fn(); console.log(b); var m = 1; function func1(){ var m =10; return function(){ m++; console.log(m); } } var n = func1(); n(); // 11 </script>
-
创建闭包:一个函数里面嵌套一个函数,内部函数引用外部函数的变量或者参数
<div>11</div> <div>22</div> <div>33</div> <div>44</div> <div>55</div> <script> var boxes= document.getElementsByTagName("div"); len = boxes.length; // 创建闭包需要两个函数 for(var i = 0; i < len; i++){ // 闭包写法一 func1(i); function func1(index){ boxes[index].onclick = function(){ console.log(index); } } // 闭包写法二 (function(index){ boxes[index].onclick = function(){ console.log(index); } })(i) // 自执行中带参数 } </script>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。