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

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

關于JS閉包的問題

關于JS閉包的問題

NodeOS 2016-03-05 15:46:05
在《JavaScript高級程序設計(第3版)》(Nicholas C.Zakas 著) 的“7.2閉包”一節中,作者為了說明“閉包所保存的是整個變量對象,而不是某個特殊的變量”,舉了一個例子,代碼如下:function?createFunctions(){ ????var?result?=?new?Array(); ???? ????for?(var?i=0;i<10;i++){ ????????result[i]?=?function(){ ????????????return?i; ????????}; ????} ???? ????return?result; }作者說,這個函數設計的目的是返回一個數組{0,1,2,3,4,5,6,7,8,9},但是實際上會返回{10,10,10,10,10,10,10,10,10,10}。那么問題來了,為什么我去調試,返回的是:{ function(){return i;} ,?function(){return i;} ,?function(){return i;} ,?function(){return i;} ,?function(){return i;} ,?function(){return i;} ,?function(){return i;} ,?function(){return i;} ,?function(){return i;} ,?function(){return i;} }WTF!!!!!!!P.S. ?我用的是alert和document.write命令,代碼如下:??function?test(){ ????var?result?=?new?Array(); ???? ????for?(var?i=0;i<10;i++){ ????????result[i]?=?function(){ ????????????return?i; ????????}; ????} ?? alert(result); ?? //document.write(result);?試了也不行,也沒解析內嵌的匿名函數。 ??}
查看完整描述

1 回答

已采納
?
慕郎_蓮華

TA貢獻83條經驗 獲得超16個贊

沒錯的~~~result的值 都是一個函數~return 10;

var?a?=?createFunctions();?//?得到返回的result

for(var?i?=?0;?i?<?a.length;?i++){
	console.log(a[i]())//每個值都是函數function(){return?10;},執行就輸出10
}


查看完整回答
1 反對 回復 2016-03-05
  • NodeOS
    NodeOS
    謝謝!那我是不是可以這么理解:這個數組中實際上引用了十個函數,直接對數組對象進行alert等操作時,十個函數未被解析,而對數組中的每一項進行alert等操作時,這些函數才會被解析,并返回{10,10,10,10,10,10,10,10,10,10}。
  • 慕郎_蓮華
    慕郎_蓮華
    恩 你直接打印數組 就是顯示她的值~function,需要執行
  • NodeOS
    NodeOS
    不好意思,原來是基礎概念理解的有問題! 多虧了你的解析,不然我對函數的理解就一直錯下去了!
點擊展開后面1
  • 1 回答
  • 0 關注
  • 1506 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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