|
|
--- |
|
|
title: continue |
|
|
slug: Web/JavaScript/Reference/Statements/continue |
|
|
page-type: javascript-statement |
|
|
browser-compat: javascript.statements.continue |
|
|
sidebar: jssidebar |
|
|
--- |
|
|
|
|
|
The **`continue`** statement terminates execution of the statements in the current iteration of the current or labeled loop, and continues execution of the loop with the next iteration. |
|
|
|
|
|
{{InteractiveExample("JavaScript Demo: continue statement")}} |
|
|
|
|
|
```js interactive-example |
|
|
let text = ""; |
|
|
|
|
|
for (let i = 0; i < 10; i++) { |
|
|
if (i === 3) { |
|
|
continue; |
|
|
} |
|
|
text += i; |
|
|
} |
|
|
|
|
|
console.log(text); |
|
|
// Expected output: "012456789" |
|
|
``` |
|
|
|
|
|
## Syntax |
|
|
|
|
|
```js-nolint |
|
|
continue; |
|
|
continue label; |
|
|
``` |
|
|
|
|
|
- `label` {{optional_inline}} |
|
|
- : Identifier associated with the label of the statement. |
|
|
|
|
|
## Description |
|
|
|
|
|
In contrast to the {{jsxref("Statements/break", "break")}} statement, `continue` does not terminate the execution of the loop entirely, but instead: |
|
|
|
|
|
- In a {{jsxref("Statements/while", "while")}} or {{jsxref("Statements/do...while", "do...while")}} loop, it jumps back to the condition. |
|
|
- In a {{jsxref("Statements/for", "for")}} loop, it jumps to the update expression. |
|
|
- In a {{jsxref("Statements/for...in", "for...in")}}, {{jsxref("Statements/for...of", "for...of")}}, or {{jsxref("Statements/for-await...of", "for await...of")}} loop, it jumps to the next iteration. |
|
|
|
|
|
The `continue` statement can include an optional label that allows the program to jump to the next iteration of a labeled loop statement instead of the innermost loop. In this case, the `continue` statement needs to be nested within this labeled statement. |
|
|
|
|
|
A `continue` statement, with or without a following label, cannot be used at the top level of a script, module, function's body, or [static initialization block](/en-US/docs/Web/JavaScript/Reference/Classes/Static_initialization_blocks), even when the function or class is further contained within a loop. |
|
|
|
|
|
## Examples |
|
|
|
|
|
### Using continue with while |
|
|
|
|
|
The following example shows a {{jsxref("Statements/while", "while")}} loop that has a `continue` statement that executes when the value of `i` is 3. Thus, `n` takes on the values 1, 3, 7, and 12. |
|
|
|
|
|
```js |
|
|
let i = 0; |
|
|
let n = 0; |
|
|
|
|
|
while (i < 5) { |
|
|
i++; |
|
|
|
|
|
if (i === 3) { |
|
|
continue; |
|
|
} |
|
|
|
|
|
n += i; |
|
|
} |
|
|
``` |
|
|
|
|
|
### Using continue with a label |
|
|
|
|
|
In the following example, a statement labeled `checkIAndJ` contains a statement labeled `checkJ`. If `continue` is encountered, the program continues at the top of the `checkJ` statement. Each time `continue` is encountered, `checkJ` reiterates until its condition returns false. When false is returned, the remainder of the `checkIAndJ` statement is completed. |
|
|
|
|
|
If `continue` had a label of `checkIAndJ`, the program would continue at the top of the `checkIAndJ` statement. |
|
|
|
|
|
```js |
|
|
let i = 0; |
|
|
let j = 8; |
|
|
|
|
|
checkIAndJ: while (i < 4) { |
|
|
console.log(`i: ${i}`); |
|
|
i += 1; |
|
|
|
|
|
checkJ: while (j > 4) { |
|
|
console.log(`j: ${j}`); |
|
|
j -= 1; |
|
|
|
|
|
if (j % 2 === 0) continue; |
|
|
console.log(`${j} is odd.`); |
|
|
} |
|
|
console.log(`i = ${i}`); |
|
|
console.log(`j = ${j}`); |
|
|
} |
|
|
``` |
|
|
|
|
|
Output: |
|
|
|
|
|
```plain |
|
|
i: 0 |
|
|
|
|
|
// start checkJ |
|
|
j: 8 |
|
|
7 is odd. |
|
|
j: 7 |
|
|
j: 6 |
|
|
5 is odd. |
|
|
j: 5 |
|
|
// end checkJ |
|
|
|
|
|
i = 1 |
|
|
j = 4 |
|
|
|
|
|
i: 1 |
|
|
i = 2 |
|
|
j = 4 |
|
|
|
|
|
i: 2 |
|
|
i = 3 |
|
|
j = 4 |
|
|
|
|
|
i: 3 |
|
|
i = 4 |
|
|
j = 4 |
|
|
``` |
|
|
|
|
|
### Unsyntactic continue statements |
|
|
|
|
|
`continue` cannot be used within loops across function boundaries. |
|
|
|
|
|
```js-nolint example-bad |
|
|
for (let i = 0; i < 10; i++) { |
|
|
(() => { |
|
|
continue; // SyntaxError: Illegal continue statement: no surrounding iteration statement |
|
|
})(); |
|
|
} |
|
|
``` |
|
|
|
|
|
When referencing a label, the labeled statement must contain the `continue` statement. |
|
|
|
|
|
```js-nolint example-bad |
|
|
label: for (let i = 0; i < 10; i++) { |
|
|
console.log(i); |
|
|
} |
|
|
|
|
|
for (let i = 0; i < 10; i++) { |
|
|
continue label; // SyntaxError: Undefined label 'label' |
|
|
} |
|
|
``` |
|
|
|
|
|
The labeled statement must be a loop. |
|
|
|
|
|
```js-nolint example-bad |
|
|
label: { |
|
|
for (let i = 0; i < 10; i++) { |
|
|
continue label; // SyntaxError: Illegal continue statement: 'label' does not denote an iteration statement |
|
|
} |
|
|
} |
|
|
``` |
|
|
|
|
|
## Specifications |
|
|
|
|
|
{{Specifications}} |
|
|
|
|
|
## Browser compatibility |
|
|
|
|
|
{{Compat}} |
|
|
|
|
|
## See also |
|
|
|
|
|
- {{jsxref("Statements/break", "break")}} |
|
|
- {{jsxref("Statements/label", "label", "", 1)}} |
|
|
|