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

867

Chúng ta thường cần lặp lại hành động nào đó.

Ví dụ: xuất hàng hóa từ danh sách này sang danh sách khác hoặc chỉ chạy cùng một code cho mỗi số từ 1 đến 10.

Vòng lặp là một cách để lặp lại cùng một code nhiều lần.

  11 mẹo JavaScript bạn sẽ không tìm thấy trong hầu hết các tutorial
  PYTHON SẼ THAY THẾ JAVASCRIPT TRỞ THÀNH NGÔN NGỮ LẬP TRÌNH PHỔ BIẾN NHẤT 2020?

Vòng lặp while

Các vòng lặp while có cú pháp sau:

 

Trong khi condition là true, phần thân codetừ vòng lặp được thực thi.

Chẳng hạn, vòng lặp bên dưới xuất ra i cho tới i < 3:

 

Một thực thi duy nhất của thân vòng lặp được gọi là phép lặp . Vòng lặp trong ví dụ trên tạo ra ba lần lặp.

Nếu i++bị thiếu trong ví dụ trên, vòng lặp sẽ lặp lại (về lý thuyết) mãi mãi. Trong thực tế, trình duyệt cung cấp các cách để ngăn chặn các vòng lặp như vậy trong JavaScript phía máy chủ, chúng ta có thể giết tiến trình này.

Bất kỳ biểu thức hoặc biến nào cũng có thể là điều kiện vòng lặp, không chỉ là so sánh: điều kiện được ước tính và chuyển đổi thành boolean bởi while.

Chẳng hạn, một cách viết ngắn hơn while (i != 0)là while (i):

 

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 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 các vòng lặp, 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 chính xá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, chúng ta 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ự có thể loại bỏ 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 tình 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 yêu cầu người dùng cung cấp 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 có thể sử dụng nó nếu chúng ta đã hoàn thành 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ị các giá trị kỳ lạ 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: 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 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 quá trình nếu người dùng hủy bỏ đầu 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 <labelName>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 có thể di chuyển nhãn lên một dòng riêng biệt:

 

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 cho phép chúng tôi nhảy vào một vị trí tùy ý trong code.

Ví dụ, không thể 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.

TechTalk via CafeDev

CHIA SẺ