for(i=0;i執行過程是賦初值0,然後執行判斷語句i,為true的話,執行循環體,循環體執行完之後執行i++;所以當i執行到2的時候,i為true,執行循環體,然後i++,此時i等於3,然後判斷i,判斷為false,不執行循環體,退出循環,此時i=3;
i,為true的話,執行循環體,循環體執行完之後執行i++;所以當i執行到2的時候,i為true,執行循環體,然後i++,此時i等於3,然後判斷i,判斷為false,不執行循環體,退出循環,此時i=3;
i++
i為true,執行循環體,然後i++,此時i等於3,然後判斷i,判斷為false,不執行循環體,退出循環,此時i=3;
i,判斷為false,不執行循環體,退出循環,此時i=3;
i=3
最後一次for循環過後,i++把i變成了3
此題用斷點方式很容易就看出來了,其實就是函數執行時機的問題,函數是在呼叫時才執行,循環執行完後,i=3,再呼叫數組內的函數時,i只能為3.
js順序執行,先執行所有的循環,在執行的過程中以此arr[0]= function(){return i;},arr[1]= function(){return i;},arr[2] = function(){return i;}同時i循環後程式3,接著呼叫arr[0]()等呼叫的時候,此時作用域內的i是3,所以依序會是3.
PS: 這題應該會先執行arr = F()把,否則會報錯呀~~
for(i=0;i執行過程是賦初值0,然後執行判斷語句
i,為true的話,執行循環體,循環體執行完之後執行
i++
;所以當i執行到2的時候,i為true,執行循環體,然後i++,此時i等於3,然後判斷
i,判斷為false,不執行循環體,退出循環,此時
i=3
;最後一次for循環過後,i++把i變成了3
此題用斷點方式很容易就看出來了,其實就是函數執行時機的問題,函數是在呼叫時才執行,循環執行完後,i=3,再呼叫數組內的函數時,i只能為3.
js順序執行,先執行所有的循環,在執行的過程中以此arr[0]= function(){return i;},arr[1]= function(){return i;},arr[2] = function(){return i;}同時i循環後程式3,接著呼叫arr[0]()等呼叫的時候,此時作用域內的i是3,所以依序會是3.
PS: 這題應該會先執行arr = F()把,否則會報錯呀~~