【问题标题】:var, loop in javascript, cannot understand the output, errorvar,javascript 中的循环,无法理解输出,错误
【发布时间】:2017-06-29 12:35:10
【问题描述】:
    var arr = [];
    for(var i=0; i<5; i++){
        arr[i] = function(){
            return i;
        };
    }
    document.write(arr[1]());

如我所料,输出为 5

但是当我在 return i 之间添加 i++ 时;以及 for 循环的结束,如下面的代码,

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

屏幕显示错误, 未捕获的 TypeError:arr[1] 不是函数

我预计输出应该是 6,但我不明白为什么。

【问题讨论】:

  • 因为在你的第一个循环之后i 将是2。我建议使用一些调试工具来查看您的变量或在您的代码中添加一些console.log() 以了解下一次发生了什么。
  • 因为你将索引增加 2,array[0],array[2],array[4]...
  • 您是否还期望arr 中的所有函数输出相同的值?这就是将要发生的事情。

标签: javascript loops for-loop


【解决方案1】:

因为i两个 增量,所以分配的数组元素将是024。元素 1 被跳过。

第一次赋值发生在i 为 0 时。然后,i 在循环结束时递增到 1,然后在 for 循环头的第三个子句中再次递增到 2。所以下一个任务是针对元素 2。

【讨论】:

  • 11分钟后我可以接受你的回答,无论如何,谢谢
  • 另外,如果没有闭包,arr 中的所有函数都不会输出5
  • @evolutionxbox 是的,这是真的,但显然 OP 已经知道了;问题中提到了。
  • 好点!我错过了最后一行,除了输出不会是6,而是5
猜你喜欢
  • 2023-03-25
  • 2018-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多