2016-08-15 30 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语句后调用。