立即执行函数和闭包

zhuanbike 2022-2-12 761

function a(){
   var num = 0;
   function b(){
      num++;
      console.log(num)
   }
   return b;
}
var demo = a();
demo();//打印第一次1
demo();//打印第二次2

a执行b定义,并被保存下来


闭包通俗讲就是:内部函数通过return保存在外部了,

闭包会导致原有作用域链不释放,造成内存泄漏。

闭包的作用:

1.实现公有变量;

2.可以做缓存(存储机制);

3.可以实现封装,属性私有化;

4.模块化开发,防止污染全局变量;

function test(){
  var num = 10;
  function a(){
    num++;
    console.log(num);  //11
  }
  function b(){
    num--;
    console.log(num);  //10
  }
  return [a,b];
}
var myArr = test();
myArr[0]();
myArr[1]();
缓存例子效果;
function a(){
  var list = "";
  var obj = {
        b:function(){
          console.log(111)
          list = "";
        },
        push:function(){
          list = myList;
        }
      }
      return obj;
}
var demo = a();
demo.push("bob");
demo.a();
立即执行函数:执行后被释放;适合初始化工作。
(function(){}());//w3c推荐第一种;
(function(){})();

传参是一样的,也一样有返回值;

如:

var num =(function(a,b,c){
  var d = a+b+c
  return d;
}(1,2,3))
num = 6;


最新回复 (0)
发新帖