Câu lệnh break và continue ECMAScript

Câu lệnh break và continue cung cấp sự kiểm soát chặt chẽ hơn đối với việc thực thi mã trong vòng lặp.

Sự khác nhau giữa câu lệnh break và continue

Câu lệnh break có thể thoát khỏi vòng lặp ngay lập tức, ngăn chặn việc lặp lại mã nào đó.

Câu lệnh continue chỉ thoát khỏi vòng lặp hiện tại, đồng thời cho phép tiếp tục vòng lặp tiếp theo dựa trên biểu thức điều khiển.

Ví dụ:

var iNum = 0;
for (var i=1; i<10; i++) {
  if (i % 5 == 0) {
    break;
  }
  iNum++;
}
alert(iNum);	// Xuất ra "4"

Trong mã trên, vòng lặp for từ 1 đến 10 lặp lại biến i. Trong thân vòng lặp, câu lệnh if sẽ (sử dụng toán tử modulo) kiểm tra giá trị của i có thể chia hết cho 5 hay không. Nếu có thể chia hết, sẽ thực hiện câu lệnh break. alert hiển thị "4", tức là số lần lặp lại trước khi thoát khỏi vòng lặp.

Nếu thay thế câu lệnh continue thay vì câu lệnh break trong ví dụ này, kết quả sẽ khác:

var iNum = 0;
for (var i=1; i<10; i++) {
  if (i % 5 == 0) {
    continue;
  }
  iNum++;
}
alert(iNum);	// Xuất ra "8"

Ở đây, alert sẽ hiển thị "8", tức là số lần lặp lại của vòng lặp. Tổng số lần lặp lại có thể là 9, nhưng khi giá trị của i là 5, sẽ thực hiện câu lệnh continue, sẽ bỏ qua biểu thức iNum++ và quay lại đầu vòng lặp.

Sử dụng cùng với câu lệnh có thẻ

Câu lệnh break và continue đều có thể được sử dụng cùng với câu lệnh có thẻ để quay lại vị trí cụ thể trong mã.

Thường thì khi có vòng lặp trong vòng lặp, bạn sẽ làm như sau, ví dụ:

var iNum = 0;
outermost:
for (var i=0; i<10; i++) {
  for (var j=0; j<10; j++) {
    if (i == 5 && j == 5) {
    break outermost;
  }
  iNum++;
  }
}
alert(iNum);	// Xuất "55"

Trong ví dụ trên, thẻ outermost biểu thị câu lệnh for đầu tiên. Trong trường hợp bình thường, mỗi câu lệnh for thực hiện 10 lần khối mã, điều này có nghĩa là iNum++ sẽ được thực hiện 100 lần, và khi hoàn thành, iNum nên bằng 100. Ở đây, câu lệnh break có một tham số, đó là thẻ của câu lệnh mà cần nhảy đến sau khi vòng lặp kết thúc. Do đó, câu lệnh break không chỉ có thể thoát khỏi vòng lặp for nội bộ (tức là câu lệnh sử dụng biến j), mà còn có thể thoát khỏi vòng lặp for ngoại bộ (tức là câu lệnh sử dụng biến i). Do đó, giá trị cuối cùng của iNum là 55, vì khi i và j đều bằng 5, vòng lặp sẽ kết thúc.

Câu lệnh continue có thể được sử dụng theo cách tương tự:

var iNum = 0;
outermost:
for (var i=0; i<10; i++) {
  for (var j=0; j<10; j++) {
    if (i == 5 && j == 5) {
    continue outermost;
  }
  iNum++;
  }
}
alert(iNum);	// Xuất "95"

Trong ví dụ trên, câu lệnh continue sẽ buộc vòng lặp tiếp tục, không chỉ là vòng lặp nội bộ, mà còn là vòng lặp ngoại bộ. Khi j bằng 5, điều này có nghĩa là vòng lặp nội bộ sẽ giảm 5 lần lặp, làm cho giá trị của iNum là 95.

Lưu ý:Có thể thấy, câu lệnh có thẻ được sử dụng cùng với break và continue rất mạnh mẽ, nhưng việc sử dụng quá mức chúng có thể gây khó khăn cho việc gỡ lỗi mã. Đảm bảo rằng các thẻ được sử dụng có tính giải thích và không nên nhúng quá nhiều lớp vòng lặp.

Lưu ý:Nếu bạn muốn biết điều gì là câu lệnh có thẻ, hãy đọc Câu lệnh thẻ ECMAScript Phần này.