Vòng lặp – while vs for trong Javascript – NordicCoder

Nếu thân vòng lặp có một câu lệnh đơn, chúng ta có thể bỏ qua dấu ngoặc nhọn {…}:

Vòng lặp do … while

Kiểm tra điều kiện có thể được di chuyển vào bên trong thân vòng lặp bằng do..whilecú pháp:

Vòng lặp trước tiên sẽ thực thi phần thân, sau đó kiểm tra điều kiện và trong khi đó là sự true, hãy thực hiện nó nhiều lần.

Ví dụ :

Dạng cú pháp này chỉ nên được sử dụng khi bạn muốn phần thân của vòng lặp thực thi ít nhất một lần bất kể điều kiện là sai. Thông thường, các hình thức khác được ưa thích : while(…) {…}.

Các vòng lặp for

Các vòng lặp for là phức tạp hơn, nhưng nó cũng là vòng lặp thường được sử dụng nhất.

Nó trông như thế này :

Hãy tìm hiểu ý nghĩa của những phần này bằng ví dụ. Vòng lặp bên dưới chạy alert(i)cho itừ 0lên đến (nhưng không bao gồm) 3:

Hãy xem xét từng forphần của câu lệnh:

phần
bắt đầu i = 0 Thực hiện một lần khi vào vòng lặp.
tình trạng i < 3 Kiểm tra trước mỗi lần lặp lặp. Nếu sai, vòng lặp dừng lại.
thân hình alert(i) Chạy đi chạy lại trong khi điều kiện là sự thật.
bươc i++ Thực hiện sau khi phân thân mỗi lần lặp.

Thuật toán vòng lặp chung hoạt động giải trí như thế này :

Đó là, beginthực thi một lần, và sau đó lặp lại: sau mỗi lần conditionkiểm tra bodyvà stepđược thực thi.

Nếu bạn chưa quen với những vòng lặp, nó hoàn toàn có thể giúp quay lại ví dụ và tái tạo cách nó chạy từng bước trên một tờ giấy .Đây đúng mực là những gì xảy ra trong trường hợp của chúng tôi :

Khai báo biến nội tuyến

Ở đây, biến số đối lập iđược khai báo ngay trong vòng lặp. Điều này được gọi là một khai báo biến trực tuyến nội tuyến. Các biến như vậy chỉ được nhìn thấy bên trong vòng lặp.

Thay vì khai báo một biến, tất cả chúng ta hoàn toàn có thể sử dụng một biến hiện có :

Bỏ qua các bộ phận

Bất kỳ phần nào của forcó thể được bỏ qua.

Ví dụ: chúng ta có thể bỏ qua beginnếu chúng ta không cần làm gì khi bắt đầu vòng lặp.

Giống như ở đây :

Chúng tôi cũng có thể loại bỏ stepmột phần:

Điều này làm cho vòng lặp giống hệt while (i < 3).

Chúng tôi thực sự hoàn toàn có thể vô hiệu mọi thứ, tạo ra một vòng lặp vô hạn :

Xin lưu ý rằng hai fordấu chấm phẩy ;phải có mặt. Nếu không, sẽ có một lỗi cú pháp.

Break vòng lặp

Thông thường, một vòng lặp thoát khi thực trạng của nó trở nên sai .

Nhưng chúng ta có thể buộc thoát ra bất cứ lúc nào bằng cách sử dụng breakchỉ thị đặc biệt .

Ví dụ : vòng lặp bên dưới nhu yếu người dùng phân phối một loạt số, break khi không nhập số :

Lệnh breakđược kích hoạt tại dòng (*)nếu người dùng nhập vào một dòng trống hoặc hủy bỏ đầu vào. Nó dừng vòng lặp ngay lập tức, chuyển điều khiển đến dòng đầu tiên sau vòng lặp. Cụ thể, alert.

Vòng lặp vô hạn của tổ hợp + breakkhi cần thiết, rất phù hợp cho các tình huống khi phải kiểm tra điều kiện của vòng lặp không phải ở đầu hoặc cuối vòng lặp, mà ở giữa hoặc thậm chí ở một số vị trí trên cơ thể.

Tiếp tục đến lần lặp tiếp theo

Lệnh continuenày là một phiên bản nhẹ hơn của break. Nó không dừng toàn bộ vòng lặp. Thay vào đó, nó dừng lặp lại hiện tại và buộc vòng lặp bắt đầu một vòng lặp mới (nếu điều kiện cho phép).

Chúng ta hoàn toàn có thể sử dụng nó nếu tất cả chúng ta đã hoàn thành xong với lần lặp hiện tại và muốn chuyển sang lần lặp tiếp theo .

Vòng lặp bên dưới chỉ sử dụng continueđể xuất các giá trị lẻ:

Đối với các giá trị chẵn của i, lệnh continuedừng thực thi phần thân và chuyển điều khiển sang lần lặp tiếp theo của for(với số tiếp theo). Vì vậy, alertchỉ được gọi cho các giá trị lẻ.

Một vòng lặp hiển thị những giá trị kỳ lạ hoàn toàn có thể trông như thế này :

Từ quan điểm kỹ thuật, điều này giống hệt với ví dụ trên. Chắc chắn, chúng ta chỉ có thể bọc code trong một ifkhối thay vì sử dụng continue.

Nhưng như một hiệu ứng phụ, điều này tạo ra thêm một cấp độ lồng nhau (gọi alert bên trong các dấu ngoặc nhọn). Nếu code bên trong ifdài hơn một vài dòng, điều đó có thể làm giảm khả năng đọc.

Không break/continueở bên phải của ‘?’

Xin lưu ý rằng các cấu trúc cú pháp không phải là biểu thức có thể được sử dụng với toán tử ternary ?. Cụ thể, các chỉ thị như break/continuekhông được phép ở đó.

Ví dụ : nếu chúng tôi lấy code này :

Viết và viết lại bằng dấu chấm hỏi :

Không thể ngừng hoạt động giải trí : có lỗi cú pháp .

Đây chỉ là một lý do khác để không sử dụng toán tử dấu hỏi ?thay vì if.

Nhãn để break / continue

Đôi khi tất cả chúng ta cần thoát ra khỏi nhiều vòng lặp lồng nhau cùng một lúc .

Ví dụ: trong đoạn code bên dưới, chúng tôi lặp lại ivà jnhắc nhở tọa độ (i, j)từ (0,0)đến (2,2):

Chúng tôi cần một cách để dừng quy trình nếu người dùng hủy bỏ nguồn vào .

Bình thường breaksau inputsẽ chỉ phá vỡ vòng lặp bên trong, Nhưng không đủ.

Một nhãn là một định danh với một dấu hai chấm trước một vòng lặp :

Câu break lệnh trong vòng lặp bên dưới thoát ra khỏi nhãn:

Trong đoạn code trên, break outernhìn lên trên cho nhãn có tên outervà thoát ra khỏi vòng lặp đó.

Vì vậy, kiểm soát đi thẳng từ (*)đến alert('Done!').

Chúng tôi cũng hoàn toàn có thể chuyển dời nhãn lên một dòng riêng không liên quan gì đến nhau :

Lệnh continuenày cũng có thể được sử dụng với nhãn. Trong trường hợp này, thực thi nhảy code đến lần lặp tiếp theo của vòng lặp được gắn nhãn. Nhãn không cho phép nhảy nhảy bất cứ nơi nào

Nhãn không được cho phép chúng tôi nhảy vào một vị trí tùy ý trong code .Ví dụ, không hề làm điều này :

Một cuộc gọi đến break/continuechỉ có thể từ bên trong một vòng lặp và nhãn phải ở đâu đó phía trên chỉ thị.

Tóm lược

Chúng tôi bao gồm 3 loại vòng:

  • while – Điều kiện được kiểm tra trước mỗi lần lặp.
  • do..while – Điều kiện được kiểm tra sau mỗi lần lặp.
  • for (;;) – Điều kiện được kiểm tra trước mỗi lần lặp, cài đặt bổ sung có sẵn.

Để tạo một vòng lặp vô hạn của người dùng, thông thường, while(true)cấu trúc được sử dụng. Một vòng lặp như vậy, giống như bất kỳ vòng lặp nào khác, có thể được dừng lại bằng lệnh break.

Nếu chúng ta không muốn làm bất cứ điều gì trong lần lặp hiện tại và muốn chuyển tiếp đến lần tiếp theo, chúng ta có thể sử dụng lệnh continue.

break/continuevới nhãn hỗ trợ trước vòng lặp. Một nhãn là cách duy nhất break/continueđể thoát khỏi một vòng lặp lồng nhau để đi đến một vòng ngoài.