Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我学习雄辩的JavaScript时,关于forEach和map有一个无休止的循环_Javascript_Map_Foreach_Infinite Loop - Fatal编程技术网

当我学习雄辩的JavaScript时,关于forEach和map有一个无休止的循环

当我学习雄辩的JavaScript时,关于forEach和map有一个无休止的循环,javascript,map,foreach,infinite-loop,Javascript,Map,Foreach,Infinite Loop,第六章 我的英语很差,无法详细描述问题,因此我粘贴了我的练习代码:http://jsbin.com/exusox/3/edit 当你点击butten时会出现无休止的循环 我已经测试了我的代码,在代码中发现了无尽的循环: function extractFootnotes(paragraphs){ var footnotes=[],currentNum=0; function dealWithFootnote(fragment){ if(fragment.type=="

第六章

我的英语很差,无法详细描述问题,因此我粘贴了我的练习代码:http://jsbin.com/exusox/3/edit

当你点击butten时会出现无休止的循环

我已经测试了我的代码,在代码中发现了无尽的循环:

function extractFootnotes(paragraphs){
    var footnotes=[],currentNum=0;
    function dealWithFootnote(fragment){
      if(fragment.type=="footnote"){
        currentNum++;
        fragment.number=currentNum;
        footnotes.push(fragment);
        return {type:"reference",number:currentNum};
      }
      else{
        return fragment;
      }
    }
    //run here ,endless loop happened.I've tested forEach,the i++ can't work.
    forEach(paragraphs,function(paragraph){
      paragraph.content=map(dealWithFootnote,paragraph.content);
    });

    return footnotes;
  }


  function forEach(array,action){
    for(i=0;i<array.length;i++)
      action(array[i]);
  }

  function map(func,array){
    var result=[];
    forEach(array,function(element){
      result.push(func(element));
    });
    return result;
  }
函数摘录脚注(段落){
var脚注=[],currentNum=0;
函数dealWithFootnote(片段){
if(fragment.type==“脚注”){
currentNum++;
fragment.number=currentNum;
脚注:推动(碎片);
返回{type:“reference”,编号:currentNum};
}
否则{
返回片段;
}
}
//在这里运行,无休止的循环发生了。我已经测试了forEach,I++无法工作。
forEach(段落、功能(段落){
段落内容=地图(处理脚注,段落内容);
});
返回脚注;
}
函数forEach(数组、操作){
对于(i=0;i

而言,“forEach”函数中的变量“i”是一个全局变量。应使用
var
声明它:

function forEach(array, action) {
  var i;
  // ... etc
}
因此,当一个对“forEach”的调用涉及一个本身将调用“forEach”的操作时,相同的变量“i”将被重置

最好将其放在代码的顶部:

"use strict";
这会告诉解释器对代码应用一些更新的规则,它会向您显示这样的错误。

您的“forEach”函数中的变量“i”是一个全局变量。您应该使用
var
声明它:

function forEach(array, action) {
  var i;
  // ... etc
}
因此,当一个对“forEach”的调用涉及一个本身将调用“forEach”的操作时,相同的变量“i”将被重置

最好将其放在代码的顶部:

"use strict";
这会告诉解释器对代码应用一些更新的规则,它会向您显示这样的错误