在全局代码中使用带有标签的语句有什么问题?
- 论坛
- 在全局代码中使用带有标签的语句有什么问题?
9 浏览
在全局代码中使用带有标签的语句有什么问题?
我刚刚在浏览JSLint的源代码时注意到了这段代码:
// 这是一个带有标签的语句吗?
// ...
如果(next_token.labeled !== true || funct === global_funct) {
stop('unexpected_label_a', label);
} // ...
有趣的是funct === global_funct
的比较。通过JSLint运行以下代码片段会抛出一个"Unexpected label"错误,因为带有标签的语句在全局执行上下文中(我知道,这是一个愚蠢的例子。这里是一个fiddle):
loop:
for (var i = 0; i < 10; i++) {
if (i === 5) {
break loop;
}
}
如果将相同的代码片段放在一个函数中,JSLint会很高兴并且在遇到标签时不会抛出错误。这里是一个通过JSLint的fiddle。如果您想尝试,可以将该代码粘贴到JSLint的在线版本中。
所以我的问题是:在全局代码中使用带标签的语句是否有问题,还是Crockford的另一个个人选择?