zoukankan      html  css  js  c++  java
  • 闭包-IIFE

    1)嵌套函数,内部函数访问了外部函数的局部变量,通过返回内部函数,在函数外部调用内部函数,从而更新外部函数的局部变量的过程;

    2)代码执行完成之后离开作用域依旧存在

    3)有可能发生内存泄露,若对象的引用计数为0,js自动回收;闭包中,外部引用内部变量,若出现循环引用,比如A引用B,B引用C....造成内存泄漏。

    function outers () {
      var num = 1;
      return function  () {
        return num+=1;
      }
    }
    var g = outers();
    console.log(g()) // 2
    console.log(g()) // 3
    console.log(g()) // 4

    3)应用

    a、封装API

    var obj = {} ;
    (function(export){
       var num = 1 ; //私有变量
       export.add = function () { 
          return num+=1;
       } ;
       export release = function () { } ;
    })(this.obj = { }) 

    b、在循环 / 异步回调中使用闭包,配合IIFE 立即执行的函数表达式

    function arrSet(){
      var arr5 = []
      for(var i=0;i<3;i++){
        var obj = {
          id : i,
          add: function (num) {
            return function () {
              return num
            }
          }(i)
        }
      arr5.push(obj)
      }
      return arr5;
    }
    var arr = arrSet();
    console.log(arr[0].add()) // i = 0
    console.log(arr[1].add()) // i = 1
    console.log(arr[2].add()) // i = 2
  • 相关阅读:
    LVM(逻辑卷管理器)部署、扩容、缩小
    部署磁盘阵列
    docker安装
    Linux基础命令
    awk补充
    awk
    shell脚本--grep与正则表达式
    文本处理工具 -wc、cut、sort、uniq的用法及参数
    Shell脚本编程原理
    重定向与管道符
  • 原文地址:https://www.cnblogs.com/yuyedaocao/p/12060297.html
Copyright © 2011-2022 走看看