2016-08-15 29 views
5

這裏是你不知道JS的例子:如何在循環中嘗試..最終繼續在JavaScript中工作?

for (var i=0; i<10; i++) { 
    try { 
     continue; 
    } 
    finally { 
     console.log(i); 
    } 
} 
// 0 1 2 3 4 5 6 7 8 9 

它是如何能夠若繼續使該上迭代中環跳打印所有的數字?爲了補充一點,「console.log(i)在循環迭代結束時運行,但在i ++之前運行」這應該解釋爲什麼它從0到9打印?

+5

'fnally'總是在其相應的'try..catch'段結束後運行。 '繼續'結束'試試','最後'會在這一刻「掛斷」,首先做到這一點!「並且在允許「繼續」繼續之前記錄'i'。 –

+3

另一個例子,嘗試'功能測試(){嘗試{返回'富';}終於{console.log('酒吧');}}',你會看到,無條件'返回'後的代碼是不是一定死了。 –

+0

無論如何,finally循環之前將會執行block。 另外,在for循環中,你告訴「設置'我'爲零,然後增加它直到它的增量低於10,然後停止」。 所以,當它進入數字10時,將導致循環的break語句。 – Kadaj

回答

4

實際上,在try ... catch聲明中,finally塊將始終到達並執行。

所以在這裏,你的情況:

for (var i=0; i<10; i++) { 
    try { 
     continue; 
    } 
    finally { 
     console.log(i); 
    } 
} 

finally塊將被每一次迭代無論你在try塊做執行,這就是爲什麼所有的號碼被印。

文檔:

您可以從該MDN try...catch Documentation看到:

的最後條款中包含的語句try塊和catch子句(S)執行後執行,但語句之前如下try語句。無論是否引發異常,finally子句都會執行。如果引發異常,即使沒有catch子句處理異常,finally子句中的語句也會執行。

1

Doc

的最後條款中包含的語句try塊 和catch子句(S)執行後執行,但之後的 try語句的語句之前。無論是否拋出異常,finally子句都會執行。如果引發異常,則即使沒有catch子句處理 異常,也會執行finally子句中的語句 。

所以最後總是在catch語句後調用。