对于JavaScript的label
语法,JS MDN指出:
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 处于相同的上下文中。
那么语法定义不正确/不完整还是我错过了什么?
break
必须嵌套在label
内。完全有可能从标记上下文之外调用func
,因此break
不会引用任何内容。break
和continue
引用循环也是如此,它们必须字面上位于循环语句中。
换句话说,函数必须是独立的可执行代码段。您必须能够查看一个函数并能够知道它的作用。break
该函数显然不属于任何循环或标签,在那里是荒谬的。该含义不能仅在调用时可用,还必须在声明时可用。