parsePre的这个函数调用在数组[1," PHYS112"," PHYS122" ]。它没有继续进入数组中的下一个元素。我想知道是否有什么东西阻止for循环继续第一次呼叫?
var stuff = {
"subject":"PHYS",
"catalog_number":"375",
"title":"Stars",
"prerequisites":"Prereq: PHYS 112 or 122 and two of PHYS 234, 241, 242, 256, 258\/358, 263, 275",
"prerequisites_parsed":[
[ 1, "PHYS112", "PHYS122" ],[ 2,"PHYS234","PHYS241","PHYS242","PHYS256",
[ 1, "PHYS258", "PHYS358"],
"PHYS263", "PHYS275"]]
};
var pr = stuff.prerequisites_parsed;
var parsePre = function (pre){
console.log(pre);
console.log(pre.length);
for(i = 0; i < pre.length; i++){
console.log(i);
if(typeof pre[i] === 'number'){
console.log(pre[i] + " of: ");
}
else if(typeof pre[i] === 'string'){
console.log(pre[i] + ", ");
}
else {
console.log("WE SHOULD RECURSE");
parsePre(pre[i]);
}
}
}
parsePre(pr);
答案 0 :(得分:1)
递归被破坏,因为每次调用都在i
- 循环中重用相同的for
变量。要解决此问题,请将您的行替换为:
for (var i = 0; ... )
这是因为当您在不使用var
的情况下分配给变量时,它将被视为全局变量。这是一个特定于JavaScript的怪癖,但不是大多数其他语言。
将来,您可以将此行放在JavaScript代码的顶部来解决这些问题:"use strict";