Javascript 标签
Javascript Label
Mozilla 开发者网络指出
语句 1:"The labeled statement can be used with break or continue statements. It is prefixing a statement with an identifier which you can refer to."
语句 2:"break can be used with any labeled statement, and continue can be used with looping labeled statements."
问题:javascript 是否允许标记任何语句或仅标记循环。如果它只是循环语句? MDN
上面 "Statement 2" 的相关性是什么
您可以标记任何语句,包括已标记的语句。只有当标记语句内的某处是 break 或 continue 有意义的上下文时,标签才会做一些有用的事情。
因此
pointless: var x = 0;
语法上没问题,但标签没有(不能)做任何事情。
为了能够 break
标签,break
需要在 内部 标签语句中。 break
不能是 "inside" 上例中的 var
声明,这就是它没有用的原因。但是,这有效,并且是 break
:
的典型用法
outerLoop: for (var i = 0; i < matrix.length; ++i) {
for (var j = 0; j < matrix[i].length; ++j) {
var inMatrix = matrix[i][j];
if (somethingWeird(inMatrix))
break outerLoop;
}
}
如果您想跳出嵌套循环结构而不需要测试一些笨拙的标志,您可以使用这样的标记语句。
来自 MDN 的有点神秘的说明,您提到 break
可以从任何类型的语句中获得,这意味着您可以 break
从非循环的事物中获得:
someLabel: if (condition(something)) {
// code code code
if (shouldGiveUp())
break someLabel;
// more code
}
这就像 "goto" 到外部 if
语句之后的下一个语句。你不能用 continue
做到这一点,因为 continue
只对迭代结构有意义。
Mozilla 开发者网络指出
语句 1:"The labeled statement can be used with break or continue statements. It is prefixing a statement with an identifier which you can refer to."
语句 2:"break can be used with any labeled statement, and continue can be used with looping labeled statements."
问题:javascript 是否允许标记任何语句或仅标记循环。如果它只是循环语句? MDN
上面 "Statement 2" 的相关性是什么您可以标记任何语句,包括已标记的语句。只有当标记语句内的某处是 break 或 continue 有意义的上下文时,标签才会做一些有用的事情。
因此
pointless: var x = 0;
语法上没问题,但标签没有(不能)做任何事情。
为了能够 break
标签,break
需要在 内部 标签语句中。 break
不能是 "inside" 上例中的 var
声明,这就是它没有用的原因。但是,这有效,并且是 break
:
outerLoop: for (var i = 0; i < matrix.length; ++i) {
for (var j = 0; j < matrix[i].length; ++j) {
var inMatrix = matrix[i][j];
if (somethingWeird(inMatrix))
break outerLoop;
}
}
如果您想跳出嵌套循环结构而不需要测试一些笨拙的标志,您可以使用这样的标记语句。
来自 MDN 的有点神秘的说明,您提到 break
可以从任何类型的语句中获得,这意味着您可以 break
从非循环的事物中获得:
someLabel: if (condition(something)) {
// code code code
if (shouldGiveUp())
break someLabel;
// more code
}
这就像 "goto" 到外部 if
语句之后的下一个语句。你不能用 continue
做到这一点,因为 continue
只对迭代结构有意义。