2017-10-13 53 views
0

这是我正在做的一些测验的Javascript代码。 在我的情况下table.length = 2,函数重复2次,第一个表和第二个参数。JS函数按预期循环双倍

但为什么命令在控制台显示4次?

console.log("Hello"); 

function start(){ 
    var brojac =0; 
    var table = document.getElementsByTagName("table"); 
    for (i =0; i<table.length ; i++){ 
     jednoPitanje(i); 
     brojac += parseInt(jednoPitanje(i)) 

    } 
    console.log("Sakupili ste ukupno " + brojac + " bodova"); 
} 

function jednoPitanje(x) { 
    var odgovori =""; 
    var table = document.getElementsByTagName("table"); 
    var tableN = table[x]; 
    var input = tableN.getElementsByTagName("input") 
    var brojInputa = tableN.getElementsByTagName("input").length; 

    //Uzima bodove,kategoriju i index tocnih odgovora 
    var bodovi =tableN.classList[2]; 
    var kategorija =tableN.classList[1]; 
    var tocni = tableN.classList[0]; 

    console.log("Hello"); 

    //Iteracija kroz sve checkboxsove u tablici 
    for (j =0; j<brojInputa ; j++){ 
     if(input[j].checked==true){ 
      odgovori += tableN.getElementsByTagName("input")[j].value; 
     } 
    } 
    if(odgovori == tocni){  
    } 
    else{bodovi = 0;} 

    return bodovi; 
} 
+1

我不知道你,但对我来说,它有助于代码正确缩进。 – trincot

回答

3

您在功能jednoPitanje()中打电话console.log("Hello");。您在循环中两次调用这个函数:

jednoPitanje(i); // <-- this cause console.log() to run 
brojac += parseInt(jednoPitanje(i)) // <-- this also causes the console.log() 

而且由于你的循环运行两次将打印四倍。

它不是立即清楚,如果你需要,其功能是运行两次,但如果你不这样做,你可以删除第一个电话:

for (i =0; i<table.length ; i++){ 
    brojac += parseInt(jednoPitanje(i)) 
} 

,或者如果你喜欢额外的清晰度:

for (i =0; i<table.length ; i++){ 
    var bodovi = jednoPitanje(i); 
    brojac += parseInt(bodovi) 
} 
+0

这正是我需要的!坦克 –