亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JS 閉包問題

JS 閉包問題

婷婷同學_ 2018-11-23 19:19:55
var arr = [];for (var i=0;i<5;i++) {        arr[i] = function() {console.log(i)}}arr[0]();arr[1]();arr[2]();arr[3]();arr[4]();// 5 5 5 5 5// 另一個var arr = [];for (var i=0;i<5;i++) {    !function(i) {        arr[i] = function() {console.log(i)}    }(i);}arr[0]();arr[1]();arr[2]();arr[3]();arr[4]();// 0 1 2 3 4第一個實例:當執行數組內匿名函數時,里面的i指向的是已經循環完畢的i,都會顯示5第二個實例:當加入一個立即執行函數后,每次循環,執行一次自調用函數,i將作為實參傳入函數內,又被數組函數(這個函數是閉包了吧)內的i引用,當自調用結束后,外函數作用域鏈被銷毀,但是由于閉包函數引用i值,它的變量對象保存下來,直至數組函數被調用時,所有的函數內作用域被銷毀(變量對象一同銷毀)問題:那5個匿名函數引用的i值是存放在哪兒?整個循環期間,共5次執行自調用函數,傳入5次i值。每次不一樣,是否可以說,5個匿名函數引用的5個i值,就是來自當初執行的5個自調用函數(父函數)的沒有被回收掉的5個變量對象?(5個閉包?)
查看完整描述

1 回答

?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

https://img1.sycdn.imooc.com//5c19fb220001d93a03520560.jpg

= = 。。。。 因為 fn 沒有形參 最終調用的時候 得出來找 i 而i已經是5了

而如果 fn 確確實實有形參 那么調用的時候, i 已經在里面了, console.log 出來的就是傳進去的 i (閉包)


查看完整回答
反對 回復 2018-12-19
  • 1 回答
  • 0 關注
  • 580 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號