2017-06-29 55 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