在全局代码中使用带有标签的语句有什么问题?

9 浏览
0 Comments

在全局代码中使用带有标签的语句有什么问题?

我刚刚在浏览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的另一个个人选择?

0