js閉包的介紹

我們的JavaScript分爲三部分:
EcmaScript(JS核心),DOM,BOM。、
面試中經常會有面試官問我們什麼是閉包?你理解的閉包是什麼?優缺點?使用場景?

一:閉包的概念:

閉包就是一個的函數的返回值是另外一個函數,返回的這個函數調用了其父函數的內部變量且在外部被執行,就產生了閉包。
特點:函數嵌套函數,內部的函數可以訪問外部函數的變量。
閉包=函數+自由變量。

  • 優點: 1. 長期駐紮在內存中
    2. 私有成員的存在
    3. 可以隔離作用域,不造成全局污染

  • 缺點:
    由於常駐內存,使用不當可能會造成泄漏

  • 如何解決內存泄漏:講暴露在外面的變量都置爲null。
    使用場景:封裝組件 for循環和定時器結合使用 for循環和dom事件結合 ,節流防抖函數的使用 導航欄獲取下標

二:閉包實現一個計數器:


//功能:遞增,遞減,獲取遞增或遞減之後的值
var Counter=function() {
    //私有變量
    var num=0;
    //私有函數
    var changeValue=function(n) {

        return num+=n;

    }
   return {
       //增
       increment:function() {
            changeValue(1)
       },
       //減
       decrement:function() {
            changeValue(-1)
       },
       //獲取值
       getValue:function() {
           return num;
       }
   }
}

三:定時器的累加:

//要求每隔1秒打印1,2,3,.....10

  //setTimeout是異步執行的,異步隊列。
 

  for(var i=1;i<=10;i++) {
     
     (function(j) {
        setTimeout(function() {
            console.log('i=j的值:',j)
        },2000*j)
     })(i)

  }

  console.log('最後打印:',i)

  


   for(let i=1;i<=10;i++) {
    
        setTimeout(function() {
            console.log('i的值:',i)
        },1000*i)
  
  }

四:改變頁面的字體大小:



<p class="p1">我可真好看</p>
<button class="btn>改變字體</button>
//先聲明一個 設置字體大小的函數 
function setSize(size) {

   return function() {

     p1.style.fontSize=size+'px'

   }

}

var size12=setSize(12);

var size40=setSize(40)

var size50=setSize(50);
var p1=document.queryselector('.p1');
var btn=document.getElementByClassName('btn');
btn=size12
btn=size40;
btn=size50;



五:封裝組件:

立即調用函數
(function(win,doc) {

  //私有變量
    //私有方法
  
  return {
  	//暴露出去的方法
  
  }




})(window,document)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章