当我学习雄辩的JavaScript时,关于forEach和map有一个无休止的循环
第六章 我的英语很差,无法详细描述问题,因此我粘贴了我的练习代码:http://jsbin.com/exusox/3/edit 当你点击butten时会出现无休止的循环 我已经测试了我的代码,在代码中发现了无尽的循环:当我学习雄辩的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=="
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";
这会告诉解释器对代码应用一些更新的规则,它会向您显示这样的错误