2016-08-15 14 views
5

Dưới đây là ví dụ từ bạn không biết JS:Làm thế nào để try..finally cho vòng lặp với tiếp tục làm việc trong JavaScript?

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

Làm thế nào là nó có thể in tất cả các số nếu tiếp tục làm cho nhảy vòng lặp qua lặp đó? Để thêm vào đó, "console.log (i) chạy ở phần cuối của vòng lặp lặp nhưng trước i ++" cần giải thích tại sao nó in từ 0 đến 9?

+5

'fnally' LUÔN LUÔN chạy sau khi phân đoạn' try..catch' tương ứng kết thúc. 'tiếp tục' kết thúc' try' tại thời điểm đó 'cuối cùng' đi" treo trên một phút, làm điều này đầu tiên! " và các bản ghi 'i' trước khi' tiếp tục' được phép tiếp tục. –

+3

Ví dụ khác, hãy thử 'function test() {try {return 'foo';} cuối cùng là {console.log ('bar');}}' và bạn sẽ thấy mã đó sau một 'return' không điều kiện không phải là nhất thiết phải chết. –

+0

Không có vấn đề gì, cuối cùng khối sẽ được thực hiện trước khi đi qua để lặp tiếp theo trong vòng lặp. Ngoài ra, trong vòng lặp, bạn đã thông báo "đặt" i "thành 0, sau đó tăng nó cho đến khi số gia tăng nhỏ hơn 10, rồi dừng". Vì vậy, khi nó đi đến số 10 nó sẽ dẫn đến tuyên bố phá vỡ vòng lặp. – Kadaj

Trả lời

4

Thực tế trong tuyên bố try ... catch, khối finally sẽ luôn được truy cập và thực hiện.

Vì vậy, đây trong trường hợp của bạn:

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

Khối finally sẽ được thực hiện mỗi lần lặp bất cứ điều gì bạn làm trong khối try, đó là lý do tại sao tất cả các số được in.

Tài liệu:

Bạn có thể nhìn thấy từ MDN try...catch Documentation rằng:

Các khoản cuối cùng chứa các câu lệnh để thực hiện sau khi các khối try và catch khoản (s) thực hiện, nhưng trước khi những điều khoản sau đây câu lệnh thử. Mệnh đề cuối cùng thực hiện bất kể có ngoại lệ hay không. Nếu một ngoại lệ được ném, các câu lệnh trong mệnh đề cuối cùng sẽ thực thi ngay cả khi không có mệnh đề catch nào xử lý ngoại lệ.

1

Doc:

Các khoản cuối cùng chứa các câu lệnh để thực hiện sau khi các khối try và bắt khoản (s) thực hiện, nhưng trước khi các báo cáo sau khi tuyên bố thử. Mệnh đề cuối cùng thực hiện bất kể có hay không không phải là một ngoại lệ được ném ra. Nếu một ngoại lệ được ném, các câu lệnh trong mệnh đề cuối cùng sẽ được thực hiện ngay cả khi không có mệnh đề bắt nào xử lý các ngoại lệ .

Vì vậy, cuối cùng luôn được gọi sau câu lệnh bắt.

Các vấn đề liên quan