前言
今天突然看到 js 居然还有标记语句,不明觉厉啊。
现在就让我们来看看什么是标记语句。
标记语句
标记语句可以和 break 或 continue 语句一起使用。标记就是在一条语句前面加个可以引用的标识符(identifier)。
语法:
label :
statement
使用场景
跳出外部循环
使用continue:
var i, j;
loop1:
for (i = 0; i < 3; i++) { //The first for statement is labeled "loop1"
loop2:
for (j = 0; j < 3; j++) { //The second for statement is labeled "loop2"
if (i === 1 && j === 1) {
continue loop1;
}
console.log('i = ' + i + ', j = ' + j);
}
}
// Output is:
// "i = 0, j = 0"
// "i = 0, j = 1"
// "i = 0, j = 2"
// "i = 1, j = 0"
// "i = 2, j = 0"
// "i = 2, j = 1"
// "i = 2, j = 2"
// Notice how it skips both "i = 1, j = 1" and "i = 1, j = 2"
换成break试试:
var i, j;
loop1:
for (i = 0; i < 3; i++) { //The first for statement is labeled "loop1"
loop2:
for (j = 0; j < 3; j++) { //The second for statement is labeled "loop2"
if (i === 1 && j === 1) {
break loop1;
}
console.log('i = ' + i + ', j = ' + j);
}
}
// Output is:
// i = 0, j = 0
// i = 0, j = 1
// i = 0, j = 2
// i = 1, j = 0
跳出代码块
'use strict'
foo: {
console.log('face');
break foo;
console.log('this will not be executed');
}
console.log('swap');
// "face"
// "swap
跳出函数
L:
function test() {
console.log('face');
break L; // SyntaxError: Undefined label 'L'
console.log('this will not be executed');
}
console.log('swap');
test()
非严格模式下,可以标记函数,但无法跳出,感觉没什么用,哪位大佬指点下。
Tip
严格模式下,函数不能被标识。
生成器函数也不能被标识。
总结
- 标记语句一般用于跳出嵌套的for循环。
- 标记语句也可用于跳出块级作用域。