javascript - 為什么結果是3不是2呢?
問題描述
function F(){ var arr=[],i; for(i=0;i<3;i++){arr[i]=function(){ return i;}; } return arr;}arr[0]();//3arr[1]();//3arr[2]();//3
問題解答
回答1:for(i=0;i<3;i++){循環(huán)體}執(zhí)行過程是賦初值0,然后執(zhí)行判斷語句i<3,為true的話,執(zhí)行循環(huán)體,循環(huán)體執(zhí)行完之后執(zhí)行i++;所以當i執(zhí)行到2的時候,i<3為true,執(zhí)行循環(huán)體,然后i++,此時i等于3,然后判斷i<3,判斷為false,不執(zhí)行循環(huán)體,退出循環(huán),此時i=3;
回答2:最后一次for循環(huán)過后,i++把i變成了3
回答3:此題用斷點方式很容易就看出來了,其實就是函數(shù)執(zhí)行時機的問題,函數(shù)是在調(diào)用時才執(zhí)行,循環(huán)執(zhí)行完后,i=3,再調(diào)用數(shù)組內(nèi)的函數(shù)時,i只能為3.
回答4:js順序執(zhí)行,首先執(zhí)行所有的循環(huán),在執(zhí)行的過程中以此arr[0]= function(){return i;},arr[1]= function(){return i;},arr[2]= function(){return i;}同時i循環(huán)后編程3,接著調(diào)用arr[0]()等調(diào)用的時候,此時作用域內(nèi)的i是3,所以依次都會是3.
PS: 這題應該會先執(zhí)行arr = F()把,否則會報錯呀~~
相關文章:
1. Span標簽2. css - 求推薦適用于vue2的框架 像bootstrap這種類型的3. docker-machine添加一個已有的docker主機問題4. css - 關于div自適應問題,大家看圖吧,說不清5. 關docker hub上有些鏡像的tag被標記““This image has vulnerabilities””6. SessionNotFoundException:會話ID為null。調(diào)用quit()后使用WebDriver嗎?(硒)7. android新手一枚,android使用httclient獲取服務器端數(shù)據(jù)失敗,但是用java工程運行就可以成功獲取。8. angular.js使用$resource服務把數(shù)據(jù)存入mongodb的問題。9. java - Collections類里的swap函數(shù),源碼為什么要新定義一個final的List型變量l指向傳入的list?10. python - django如何每次調(diào)用標簽的時候都取隨機數(shù)據(jù)
