閉包

什么是閉包?

  • 可以訪問函數(shù)內(nèi)部變量的函數(shù)
//首先我們要明白這段代碼
//外面的a是跟函數(shù)作用域里邊的a是不同的
//num(a)只是把外面的a的值賦值給函數(shù)里面的a
//函數(shù)里面聲明的東西跟外面的一點(diǎn)關(guān)系都沒有蹄溉。

var a=99
function num(a){
    ++a
    console.log(a)
}
num(a)//100
console.log(a)//99
var arr=[];
    for(var i=0;i<2;i++){
        arr[i]=function(){
            console.log(i)
        }
    }
arr[1]()//都是會(huì)打印出2
arr[0]()//2

//首先明白function()里面的東西是什么時(shí)候會(huì)執(zhí)行究恤。
//實(shí)在函數(shù)被調(diào)用的時(shí)候才會(huì)執(zhí)行崩侠,上面代碼在函數(shù)執(zhí)行的時(shí)候傀缩,已經(jīng)遍歷完畢那先,i==5,所以赡艰,每次打印的都是5

改裝下

var arr=[];
for(var i=0;i<2;i++){
    function num(i){
        arr[i]=function(){
            console.log(i)
        }
    }
    num(i)
}
arr[0]()//0
arr[1]()//1

上面的代碼可以拆分為
當(dāng)i=0的時(shí)候:
function num(i){
        //i=0 寫在形參的I其實(shí)就是在函數(shù)內(nèi)部聲明了一個(gè)變量==var i
        arr[0]=function(){
        console.log(0) //我獲取的是函數(shù)里面的i
    }
}
num(0)
//參考例子1售淡,我們是吧遍歷的i的值賦給了函數(shù)里面的i,
//那么我們外面的調(diào)用arr[0]()的時(shí)候瞄摊,
自然里面的就會(huì)按照函數(shù)的作用域勋又,
上去找i打印,
找到的是num函數(shù)里面的i换帜,
所以就打印出0;


如此類推
當(dāng)i=1時(shí):
function num(i){
        //i=0 寫在形參的I其實(shí)就是在函數(shù)內(nèi)部聲明了一個(gè)變量==var i
        arr[1]=function(){
        console.log(1) //我獲取的是函數(shù)里面的i
    }
}
num(1)

最后可以改為:
    var arr=[];
    for(var i=0;i<2;i++){
        !function (i){
            arr[i]=function(){
                console.log(i)
            }
        }(i)
    }
    arr[0]()
    arr[1]()

第二種方法

var arr=[];
    for(var i=0;i<2;i++){
        arr[i]=function(i){
            return function (){
                console.log(i)
            }
        }(i)
    }
    arr[0]()//0
    arr[1]()//1

//拆一下 也可以寫為:
var arr=[];
    for(var i=0;i<2;i++){
        arr[i]=fn(i)
        function fn(i){
            return function (){
                console.log(i)
            }
        }
    }
    arr[0]()//0
    arr[1]()//1

閉包說明很多道理鹤啡,更重要的是理解好函數(shù)的作用域問題惯驼。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市祟牲,隨后出現(xiàn)的幾起案子隙畜,更是在濱河造成了極大的恐慌,老刑警劉巖说贝,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件议惰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡乡恕,警方通過查閱死者的電腦和手機(jī)言询,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來傲宜,“玉大人运杭,你說我怎么就攤上這事『洌” “怎么了辆憔?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)报嵌。 經(jīng)常有香客問我虱咧,道長(zhǎng),這世上最難降的妖魔是什么锚国? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任腕巡,我火速辦了婚禮,結(jié)果婚禮上跷叉,老公的妹妹穿的比我還像新娘逸雹。我一直安慰自己,他們只是感情好云挟,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布梆砸。 她就那樣靜靜地躺著,像睡著了一般园欣。 火紅的嫁衣襯著肌膚如雪帖世。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天沸枯,我揣著相機(jī)與錄音日矫,去河邊找鬼。 笑死绑榴,一個(gè)胖子當(dāng)著我的面吹牛哪轿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播翔怎,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼窃诉,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼杨耙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起飘痛,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤珊膜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后宣脉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體车柠,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年塑猖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了竹祷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡萌庆,死狀恐怖溶褪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情践险,我是刑警寧澤猿妈,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站巍虫,受9級(jí)特大地震影響彭则,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜占遥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一俯抖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瓦胎,春花似錦芬萍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至负芋,卻和暖如春漫蛔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背旧蛾。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工莽龟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锨天。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓毯盈,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親病袄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子奶镶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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

  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持迟赃,譯者再次奉上一點(diǎn)點(diǎn)福利:阿里云產(chǎn)品券陪拘,享受所有官網(wǎng)優(yōu)惠厂镇,并抽取幸運(yùn)大...
    HetfieldJoe閱讀 5,600評(píng)論 16 88
  • 閉包(closure)是Javascript語言的一個(gè)難點(diǎn),也是它的特色左刽,很多高級(jí)應(yīng)用都要依靠閉包實(shí)現(xiàn)捺信。 一、變量...
    zock閱讀 1,075評(píng)論 2 6
  • 閉包(closure)是Javascript語言的一個(gè)難點(diǎn)欠痴,也是它的特色迄靠,很多高級(jí)應(yīng)用都要依靠閉包實(shí)現(xiàn)。 一喇辽、變量...
    zouCode閱讀 1,271評(píng)論 0 13
  • 特別說明掌挚,為便于查閱,文章轉(zhuǎn)自https://github.com/getify/You-Dont-Know-JS...
    殺破狼real閱讀 484評(píng)論 0 0
  • 閉包: 官方”的解釋是:閉包是一個(gè)擁有許多變量和綁定了這些變量的環(huán)境的表達(dá)式(通常是一個(gè)函數(shù))菩咨,因而這些變量也是該...
    小裁縫sun閱讀 610評(píng)論 0 5