閉包

什么是閉包?

總結(jié):

1,有函數(shù)嵌套
2,內(nèi)部函數(shù)被外部訪問,暴露出了句柄「return 內(nèi)部函數(shù)」

上菜
圖片.png
圖片.png
圖片.png
特點(diǎn)

1,暴露出來的這個函數(shù)有被調(diào)用的可能性「return 內(nèi)部函數(shù)」,外部函數(shù)就永遠(yuǎn)不能被釋放「內(nèi)存泄漏」
內(nèi)存泄漏是什么意思?
一塊被分配的內(nèi)存既不能使用,又不能回收,直到瀏覽器進(jìn)程結(jié)束(關(guān)閉瀏覽器)。
function xx(){
var b={name:"pear"}
var a=1
console.log(a)
}
上面代碼里面的b就造成了內(nèi)存泄漏,當(dāng)xx()執(zhí)行完后,只是釋放了棧里面的b,但是內(nèi)存里面的數(shù)據(jù)不會釋放

非常容易錯的一個coding

完整代碼

圖片.png

修改:在for循環(huán)外部添加一層function包裹

怎么解決這個問題呢?我們需要每個li都綁定點(diǎn)擊事件

立即執(zhí)行函數(shù)
完整代碼

圖片.png

2,外部能訪問函數(shù)內(nèi)部的變量

定義全局變量:

var global=  null;  
function fn1(){
     var str1="1";
     function fn2(){
         console.log(str1);
    }
   global=fn2;
}
fn1()//執(zhí)行了這行,才能得到global=fn2的賦值
global();//1

返回值:

function fn1(){
     var str1="1";
     function fn2(){
         console.log(str1);
    }
    return fn2;
}
var str=fn1()//執(zhí)行了這行,才能得到str=fn2的賦值
str();//1

閉包的好處,有豆腐塊的命名空間

圖片.png

這和模塊化編程有必然的聯(lián)系
現(xiàn)在不是很懂為什么$變量不會被覆蓋?
參考文章:
方方老師 JS中的閉包是什么?
阮一峰

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 閉包(closure)是Javascript語言的一個難點(diǎn),也是它的特色,很多高級應(yīng)用都要依靠閉包實(shí)現(xiàn)。 一、變量...
    zock閱讀 1,085評論 2 6
  • 閉包(closure)是Javascript語言的一個難點(diǎn),也是它的特色,很多高級應(yīng)用都要依靠閉包實(shí)現(xiàn)。 一、變量...
    zouCode閱讀 1,284評論 0 13
  • 閉包: 官方”的解釋是:閉包是一個擁有許多變量和綁定了這些變量的環(huán)境的表達(dá)式(通常是一個函數(shù)),因而這些變量也是該...
    小裁縫sun閱讀 634評論 0 5
  • 昨天中午下班,發(fā)現(xiàn)鄰居家來了客人,將小方桌搬在公共的走廊里正吃午飯呢,于是主動打了聲招呼,聊了二句天氣。鄰居...
    余香齋主人閱讀 636評論 1 2
  • 1、UIStatusBar簡介 iOS上的statusBar就是指的最上面的20point高的部分,分為兩個部分 ...
    MrJ的雜貨鋪閱讀 5,685評論 2 14