2016-04-30 62 views
0

獨立運行,這是我的第一個問題,JS。我有這個函數在setInterval中。所以這個函數重複。的JavaScript - innerHTML的不setInterval的

function chooseAnswer() { 
correct.onclick = function() { 
    if (range == 0) { 
     score++; 
     isGameOver = false; 
    } 
    else { 
     isGameOver = true; 
    } 
} 

incorrect.onclick = function() { 
    if (range != 0) { 
     score++; 
     isGameOver = false; 
    } 
    else { 
     isGameOver = true; 
    } 
} 

// Display score 
displayScore.innerHTML = score; 
} 

除非得分(innerHTML)在觸發onlick後不立即更新,否則一切正常。它等到下一輪時間間隔更新。但是,如果我搬到

displayScore.innerHTML = score; 

,並把它之後

score++; 
中的任何一種

權的if語句,將比分更新馬上的點擊數被觸發後。爲什麼會發生?不管setInterval是否這個函數都不能獨立工作?也就是說,通過行執行行,所以

displayScore.innerHTML = score; 

將更新向右走,就不必等到下一輪。

+0

如何你有()設立的setInterval? – jeff

+0

不清楚爲什麼 - 在您的第一個代碼塊中 - 您認爲displayScore.innerHTML = score;'會在點擊後立即更新'displayScore'。如果發生點擊,則只執行回調中的代碼。 'correct.onclick = function(){....}'不會暫停執行,它會爲該元素設置'onclick'回調。 –

+0

這只是一個簡單的setInterval,window.setInterval(chooseAnswer,5000),這是正確的我上面的chooseAnswer()函數。 –

回答

0

這更是一個評論,但因爲這是長的,我會在這裏寫:

在循環中這是不相關的continue。當調用chooseAnswer時,無論是手動還是通過setInterval。然後三條語句執行:

  1. 回調的分配correct.onclick
  2. 回調函數本身只是存儲在onclick當時回調到incorrect.onclick
  3. displayScore.innerHTML = score;

分配,但他們沒有執行/評估那一刻。只有在那個時候你點擊correctincorrect那麼瀏覽器就會檢查是否回調存儲在onclick,如果有一個,那麼它就會被執行。但這種回調僅包含此代碼:

function() { 
    if (range == 0) { 
    score++; 
    isGameOver = false; 
    } else { 
    isGameOver = true; 
    } 
} 

下面的代碼就相當於你的,但與其他結構可能更容易理解:

function correctCallback() { 
    if (range == 0) { 
    score++; 
    isGameOver = false; 
    } else { 
    isGameOver = true; 
    } 
} 

function incorrectCallback() { 
    if (range != 0) { 
    score++; 
    isGameOver = false; 
    } else { 
    isGameOver = true; 
    } 
} 

function chooseAnswer() { 
    correct.onclick = correctCallback; //correctCallback is not call but just assigned to correct.onclick 
    incorrect.onclick = incorrectCallback; //incorrectCallback is not call but just assigned to correct.onclick 

    // Display score 
    displayScore.innerHTML = score; 
} 

而且更是沒有意義覆蓋一次又一次地在onclick之間。

+0

我想我的問題是,點擊一個按鈕後會發生什麼? 「執行線」將在什麼時候? –

+0

@PhuLe你是什麼意思與'執行線'和'什麼時候將'執行線'是'?如果在JavaScript引擎檢查是否存在爲該事件註冊的回調函數並執行這些回調函數時,JavaScript引擎正在等待用戶的任何輸入,然後它將再次等待輸入或執行其他使用'setTimeout'或'setInterval'排隊的代碼。但事件處理在'chooseAnswer'執行後發生。 –