title | slug | l10n | ||
---|---|---|---|---|
continue |
Web/JavaScript/Reference/Statements/continue |
|
{{jsSidebar("Statements")}}
continue
声明终止当前循环或标记循环的当前迭代中的语句执行,并在下一次迭代时继续执行循环。
{{EmbedInteractiveExample("pages/js/statement-continue.html")}}
continue;
continue label;
label
- : 标识标签关联的语句
与 {{jsxref("Statements/break", "break")}} 语句的区别在于,continue
并不会完全终止循环的执行,而是:
- 在 {{jsxref("Statements/while", "while")}} 或 {{jsxref("Statements/do...while", "do...while")}} 循环中,控制流跳转回条件判断;
- 在 {{jsxref("Statements/for", "for")}} 循环中,控制流跳转到更新语句。
- 在 {{jsxref("Statements/for...in", "for...in")}}、{{jsxref("Statements/for...of", "for...of")}} 或 {{jsxref("Statements/for-await...of", "for await...of")}} 循环中,它会跳转到下一次迭代。
continue
语句可以包含一个可选的标签以控制程序跳转到指定循环的下一次迭代,而非当前循环。这种情况要求 continue
语句在被标识的语句内部。
在脚本、模块、函数体或静态初始块的顶层不能使用 continue
语句(无论是否带有后续标签),即使该函数或类进一步包含在循环中也不行。
下述例子展示了一个在 i
为 3 时执行 continue
语句的 {{jsxref("Statements/while", "while")}} 循环。因此,n
的值在几次迭代后分别为 1、3、7 和 12。
i = 0;
n = 0;
while (i < 5) {
i++;
if (i === 3) {
continue;
}
n += i;
}
在下面的例子中,被标记为 checkiandj
的语句包含一个被标记为 checkj
的语句。当遇到 continue
语句时,程序回到 checkj
语句的开始继续执行。每次遇到 continue
时,再次执行 checkj
,直到条件判断返回 false。之后完成 checkiandj
语句剩下的部分。
但如果 continue
的标号被改为 checkiandj
,那程序将会从 checkiandj
语句的开始继续运行。
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 checkJ;
console.log(`${j} 是奇数。`);
}
console.log(`i = ${i}`);
console.log(`j = ${j}`);
}
输出:
i:0
// checkj 开始
j:8
7 是奇数。
j:7
j:6
5 是奇数。
j:5
// checkj 结束
i = 1
j = 4
i:1
i = 2
j = 4
i:2
i = 3
j = 4
i:3
i = 4
j = 4
continue
不能在跨越函数边界的循环中使用。
for (let i = 0; i < 10; i++) {
(() => {
continue; // SyntaxError: Illegal continue statement: no surrounding iteration statement
})();
}
引用标签时,标签语句必须包含 continue
语句。
label: for (let i = 0; i < 10; i++) {
console.log(i);
}
for (let i = 0; i < 10; i++) {
continue label; // SyntaxError: Undefined label 'label'
}
标记的语句必须是一个循环。
label: {
for (let i = 0; i < 10; i++) {
continue label; // SyntaxError: Illegal continue statement: 'label' does not denote an iteration statement
}
}
{{Specifications}}
{{Compat}}
- {{jsxref("Statements/break", "break")}}
- {{jsxref("Statements/label", "标记", "", 1)}}