首页 > 其他 > 详细

函数自执行,闭包,局部变量,内存回收

时间:2020-08-24 18:39:34      阅读:69      评论:0      收藏:0      [点我收藏+]
一:函数内变量都是有独立作用域的:1函数外部获取不到内部的变量,2函数执行时浏览器给内部变量分配内存,执行完就会被回收机制回收。
function foo(c){
    var num = c;
    num++;
    return num;
}
foo(5);//6
foo();//NAN        变量num使用完后就被回收了,所以这次执行num时重新定义的,没有参数所以NAN
//使用闭包:可使局部变量内存不被回收
function foo(c){
    var num = c;
    return function A(){
        num++;
        return num;
    }
}
var b = foo(5);//A
b();//6                                              foo(5)执行返回的时一个函数赋给b,函数里用到了foo()函数里的变量num,所以这个变量内存不会被回收,
b();//7                         再次执行b()的时候num是已存在的。
二:自执行函数节省全局变量,节省内存。
三:函数闭包为了打通函数内部与外部的桥梁
比如典型的循环绑定问题
<ul class="list">
      <li class="bloc">1</li>
      <li class="bloc">2</li>
      <li class="bloc">3</li>
      <li class="bloc">4</li>
      <li class="bloc">5</li>
 </ul>
  var ali = document.querySelectorAll(‘ul.list li‘)
//var声明变量可以穿透作用域
  for(var i = 0,l = ali.length;i < l;i++){
   ali[i].onclick = function(){
        console.log(i)
    }
  }
//利用自执行函数将每次循环的i值放到了对应的自执行函数里,该函数返回一个函数(闭包),返回的函数里使用了自执行函数里的参数j,该变量j就不会被回收,点击li打印的就是对应的闭包函数里的j值
for(var i = 0,l = ali.length;i < l;i++){
      ali[i].onclick = (function(j){
          return function(){
               console.log(j)
          }
      })(i)
 }

 

 

函数自执行,闭包,局部变量,内存回收

原文:https://www.cnblogs.com/live-to-talk/p/13554921.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!