javascript - 為什么結(jié)果是3不是2呢?
問(wèn)題描述
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
問(wèn)題解答
回答1:for(i=0;i<3;i++){循環(huán)體}執(zhí)行過(guò)程是賦初值0,然后執(zhí)行判斷語(yǔ)句i<3,為true的話,執(zhí)行循環(huán)體,循環(huán)體執(zhí)行完之后執(zhí)行i++;所以當(dāng)i執(zhí)行到2的時(shí)候,i<3為true,執(zhí)行循環(huán)體,然后i++,此時(shí)i等于3,然后判斷i<3,判斷為false,不執(zhí)行循環(huán)體,退出循環(huán),此時(shí)i=3;
回答2:最后一次for循環(huán)過(guò)后,i++把i變成了3
回答3:此題用斷點(diǎn)方式很容易就看出來(lái)了,其實(shí)就是函數(shù)執(zhí)行時(shí)機(jī)的問(wèn)題,函數(shù)是在調(diào)用時(shí)才執(zhí)行,循環(huán)執(zhí)行完后,i=3,再調(diào)用數(shù)組內(nèi)的函數(shù)時(shí),i只能為3.
回答4:js順序執(zhí)行,首先執(zhí)行所有的循環(huán),在執(zhí)行的過(guò)程中以此arr[0]= function(){return i;},arr[1]= function(){return i;},arr[2]= function(){return i;}同時(shí)i循環(huán)后編程3,接著調(diào)用arr[0]()等調(diào)用的時(shí)候,此時(shí)作用域內(nèi)的i是3,所以依次都會(huì)是3.
PS: 這題應(yīng)該會(huì)先執(zhí)行arr = F()把,否則會(huì)報(bào)錯(cuò)呀~~
相關(guān)文章:
1. python3.x - python連oanda的模擬交易api獲取json問(wèn)題第五問(wèn)2. docker - 如何修改運(yùn)行中容器的配置3. nignx - docker內(nèi)nginx 80端口被占用4. docker-machine添加一個(gè)已有的docker主機(jī)問(wèn)題5. java - SSH框架中寫(xiě)分頁(yè)時(shí)service層中不能注入分頁(yè)類6. 關(guān)于docker下的nginx壓力測(cè)試7. 為什么我ping不通我的docker容器呢???8. node.js - 我是一個(gè)做前端的,求教如何學(xué)習(xí)vue,node等js引擎?9. javascript - js代碼獲取驗(yàn)證碼倒計(jì)時(shí)問(wèn)題10. html5 - 百度echart官網(wǎng)下載的地圖json數(shù)據(jù)亂碼
