javascript - 為什么結(jié)果是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++;所以當(dāng)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: 這題應(yīng)該會先執(zhí)行arr = F()把,否則會報錯呀~~
相關(guān)文章:
1. android - 分享到微信,如何快速轉(zhuǎn)換成字節(jié)數(shù)組2. javascript - 能否讓vue-cli的express修改express重啟服務(wù)3. 解決Android webview設(shè)置cookie和cookie丟失的問題4. angular.js - Beego 與 AngularJS的模板格式?jīng)_突,該怎么解決?5. javascript - vue2.0中,$refs對象為什么用駝峰的方式獲取不到屬性?6. node.js - npm一直提示proxy有問題7. html5 - 有人做過防微信app界面的H5 demo嗎?8. javascript - 有沒有iOS微信中可以在背景播放視頻的方法?9. 最新版本的微信web開發(fā)者工具必須要APPID,會提供測試號,但是像你一樣tabBar配置的話不會顯示首頁與日志,難道我要下載跟你一樣的版本?10. Navicat for mysql 中以json格式儲存的數(shù)據(jù)存在大量反斜杠,如何去除?
