对于JavaScript的label
语法,JS MDN states:
label
:statement
label
:任何不是保留字的JavaScript标识符。
statement
:一个JavaScript语句。
break
可以与任何标记的语句一起使用,continue
可以与循环标记语句一起使用。
根据这个,你可以按照以下方式打破:
statement: {
console.log("this will log");
break statement;
console.log("this will not log");
}

而且,既然它说您可以打破任何标记的语句,我会预期这会发挥作用:
function func() {
console.log("works?")
break statement;
console.log("this too?")
}
statement: {
console.log("this will log");
func();
console.log("this will not log");
}
// throws Uncaught SyntaxError: Undefined label 'statement'

但它会抛出Uncaught SyntaxError: Undefined label 'statement'
我想也许我可以按如下方式更新func
:
function func(breakMe) {
console.log("works?")
break breakMe;
console.log("this too?")
}
statement: {
console.log("this will log");
func(statement);
console.log("this will not log");
}
// throwsUncaught SyntaxError: Undefined label 'statement'

但statement
不能以这种方式引用(抛出statement is not defined
);
同样的错误:
statement: {
function func() {
console.log("works?")
break statement;
console.log("this too?")
}
console.log("this will log");
func();
console.log("this will not log");
}

我似乎对这个"任何"到底是什么有一个根本的误解?提到。
鉴于这是有效的:
labelOne: {
console.log("this will log")
labelTwo: {
console.log("will log too");
break labelOne;
console.log("this won't log");
}
console.log("neither will this");
}

可能更准确的描述是:
break
只能在这些语句的上下文中与带标签的语句一起使用。
但即便如此,通过此描述,func()
应该打破标记为statement
的语句的执行,因为它与我的POV处于相同的上下文中。
语法是否错误/不完整定义或我遗漏了什么?
答案 0 :(得分:2)
break
必须完全嵌套在label
内。完全可以从标记的上下文之外调用func
,因此break
不会引用任何内容。 break
和continue
在引用循环时也是如此,它们必须在循环语句中字面。
换句话说,函数必须是一个自包含的可执行代码段。您必须能够查看某个功能并能够分辨它的作用。该函数中的break
显然不属于任何循环或标签,它在那里是荒谬的。这个含义不仅可以在通话时使用,而且必须在声明时提供。