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

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

麻煩大家幫忙看看,關于javascript的問題

麻煩大家幫忙看看,關于javascript的問題

ZXJ03 2017-04-14 22:53:51
例:function?box{ var?arr=[]; for(var?i=0;i<5;i++){ ????arr[i]=function(){ ????????return?i; ????????}; ????} ????return?arr; } var?b=box(); for(var?i=0;i<5;i++){ ????alert(b[i]()); } 為什么這個打印出來的是55555 而下面這個 function?box{ var?arr=[]; for(var?i=0;i<5;i++){ ????arr[i]=(function(num){ ????????return?function(){ ????????????return?num; ????????????} ????????})(i); ????} ????return?arr; } var?b=box(); for(var?i=0;i<5;i++){ ????alert(b[i]); } 這個打印出來的結果是0,1,2,3,4
查看完整描述

3 回答

?
ruibin

TA貢獻358條經驗 獲得超213個贊

第一個是閉包問題,第二個是由于alert會阻斷程序的運行
查看完整回答
反對 回復 2017-04-15
?
學海無涯樂悠悠

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


1.第一行 ;function box{}應該是function box();屬于手誤。
2.第一個問題,為什么打印出來是55555:因為box()返回一個數組-arr,arr[0]=function(){return i},........arr[4]=function(){return i}。i的值一直被引用,并沒有被垃圾回收(renturn i還在引用),理解為box對象的私有變量。循環完i=5;所以不管是arr[0]()=5,......還是到arr[4]()都=5;注意在循環的過程中arr[0]()=0,arr[1]()=1。因為循環過程中i的值是從0到4.

接下來b=box(),循環調用b[0]().......b[4]();輸出仍然一直為5;

3.第二個問題,比較容易理解,調用box()返回一個數組,內容為arr[0]=0,arr[1]=1,.....arr[4]=4;下面遍歷輸入自然是0,1,2,3,4。

查看完整回答
反對 回復 2017-04-15
?
慕粉4075985

TA貢獻104條經驗 獲得超33個贊

一兩句說不清,詳情百度 閉包
查看完整回答
反對 回復 2017-04-15
  • 3 回答
  • 0 關注
  • 1853 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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