• 闭包


    1.什么是闭包?
      闭包的概念:闭包就是函数嵌套时,让局部变量变成自由变量的环境,是一种让局部变量进化的方式;闭包定义在一个函数内部的函数 
      垃圾回收机制:用过一次的东西,先放在一个内存中,不立即删掉,可以随时进行还原或再次使用,直到没有任何作用的时候再清除,如家用电器,电脑回收站
    2.闭包的应用场景

      for循环之中:

      for循环之中的i变量会因为for的循环次数被覆盖,所以在for循环内部存在函数时,而且这个函数内会调用i变量,这种情况下就需要用到闭包。 

    for (var i = 0; i < 10; i++) {
            console.log(i);        //可以访问到每次的i
        }
    必须满足两个条件:
    1.在for循环内存在函数 2.函数内会调用这个变量 var ali = document.getElementsByTagName("li"); for(var i=0;i<10;i++){ ali[i].onclick = function(){ console.log(i); //在函数内部就无法访问到外部变量 } } 如何形成闭包 var ali = document.getElementsByTagName("li"); for(var i=0;i<10;i++){ (function(a){ ali[a].onclick = function(){ console.log(a); } })(i) }

      一旦内部函数调用外部函数的局部变量,那么这个时候,这个局部变量就会变成内部函数的私有变量

      当需要给setTimeout的回调函数传参时:

     setTimeout(function (a){
            console.log(a); //两秒后,undefined
        }, 2000);
        或
        setTimeout(fn(10), 2000);
        function fn(a){
            console.log(a); //没有延迟,直接打印10
        }
        
        使用闭包:
    
        function fn(a){
            return function(){
                console.log(a); //两秒后,10
            }
        }
        var f = fn(10);
        setTimeout(f, 2000);
      闭包的特点:
      闭包是将函数内部和函数外部连接起来的桥梁
      可以读取函数内部的变量
      让这些变量的值,始终保存在内存中,不会在调用结束后被系统回收
      避免全局变量命名空间的污染
      内存消耗很大,不能滥用
      闭包会在父函数外部,改变父函数内部变量的值
  • 相关阅读:
    查询解决问题的方法
    C++实现网格水印之调试笔记(三)—— 初有结果
    C++实现网格水印之调试笔记(二)
    C++实现网格水印之调试笔记(一)
    C++调用matlab实例
    C++调用Matlab引擎及Eigen配置
    A Blind Watermarking for 3-D Dynamic Mesh Model Using Distribution of Temporal Wavelet Coefficients
    Watermarking 3D Polygonal Meshes in the Mesh Spectral Domain
    Apriori学习笔记
    Robust Mesh Watermarking
  • 原文地址:https://www.cnblogs.com/wu0379/p/11782314.html
Copyright © 2020-2023  润新知