2017-10-13 88 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

這正是我需要的!坦克 –