2017-06-29 74 views
1
var arr = []; 
    for(var i=0; i<5; i++){ 
     arr[i] = function(){ 
      return i; 
     }; 
    } 
    document.write(arr[1]()); 

輸出爲5,如我預期變種,循環在javascript,無法理解的輸出,錯誤

但是當我加入回報之間我+ + I;和的for循環結束時,如下面的代碼,

var arr = []; 
    for(var i=0; i<5; i++){ 
     arr[i] = function(){ 
      return i; 
     }; 
     i++; 
    } 
    document.write(arr[1]()); 

屏幕顯示錯誤, 未捕獲的類型錯誤:常用3 [1]不是函數

我期望輸出應爲6,但我無法理解爲什麼。

+0

因爲第一個循環'i'將會是'2'。我建議使用一些調試工具來查看你的變量,或者在你的代碼中加入一些'console.log()'來理解下一次發生的事情。 – George

+0

由於您將索引增加2,array [0],array [2],array [4] ... – dloeda

+0

您是否還期望'arr'中的所有函數都輸出相同的值?那將會發生。 – evolutionxbox

回答

6

因爲你必須有增量i,數組的元素分配將024。元素1被跳過。

第一項分配發生在i爲0時。然後,i在循環結束時增加爲1,然後再在for循環標題的第三個子句中增加到2。因此,下一個任務是針對元素2.

+0

哦我的..謝謝 – jwkoo

+0

我可以在11分鐘後接受你的回答,無論如何,謝謝 – jwkoo

+0

另外,如果沒有關閉,'arr'中的所有功能都不會輸出'5'。 – evolutionxbox