【JS深入學(xué)習(xí)一】一句話解釋閉包

一句話解釋

  • 在不涉及更深層面的基礎(chǔ)上,閉包就是在一個(gè)函數(shù)內(nèi)部嵌套另一個(gè)函數(shù),即函數(shù)的嵌套;
  • 引用《高級程序設(shè)計(jì)》里的一句話:在函數(shù)內(nèi)部定義了其他函數(shù)的時(shí)候,就創(chuàng)建了閉包。閉包有權(quán)訪問包含函數(shù)內(nèi)部的所有變量;
  • 每一項(xiàng)技術(shù)都會有它需要達(dá)成的目的,閉包的目的就是:將局部變量的周期變?yōu)橛谰?/em>;
function foo(){
  var a =1;
return function(){
  //return也是進(jìn)行調(diào)用,目的是在內(nèi)部函數(shù)(也就是定義的匿名函數(shù))里永久的獲得這個(gè)函數(shù)的使用權(quán)
  console.log(a);
  }
}
  • 放一個(gè)小案例
    • 被閉包處理的局部變量,叫做自由變量;
    • 自由變量的聲明周期是永久的;
    • 這個(gè)自由變量只有在函數(shù)內(nèi)部才能訪問
            function outerFn(){
                  var count = 0;
                  function innerFn(){
                        count ++;
                        console.log(count);
                  }
                  return innerFn;
            }
            var innerFn1 = outerFn();
            innerFn1(); //內(nèi)部函數(shù)訪問一次count;count++ 為1
            innerFn1();// 第二次訪問; count++ 為 2

深入理解

  • 要深入理解就要先了解函數(shù)的作用域:分為 全局作用域局部作用域 ,被函數(shù)大括號包裹的部分我們稱之為局部作用域,不被函數(shù)大括號包裹的我們稱之為全局作用域;
  • 若將全局變量作用域設(shè)為第一級,那么函數(shù)內(nèi)部的變量作用域可被稱為第二級,而函數(shù)內(nèi)部嵌套的函數(shù)作用域則被稱為第三級,第一級不能訪問第二級別的變量,第二級別則不能訪問第三級別的變量,但反之確實(shí)可以的,這依靠的就是作用域鏈,若函數(shù)內(nèi)部作用域查找不到,則向上一級查找,直至第一級為止;
  • 閉包可以讓我們在第一級作用域中,通過第三級作用域引用到第二級作用域的變量,而方法就是在第二級作用域向第一級作用域返回?fù)碛械谌壸饔糜虻暮瘮?shù)引用。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容