答案 0 :(得分:0)
不,显然这是不可能的。标签不能在赋值语句中使用,标签的范围是定义它的循环的条件块。
pastureLoop:
for (i = 0; i < pastureLen; i++)
{
var pasture = pastures[i];
var cows = pasture.getCows();
var j, numCows = cows.length;
for (j = 0; j < numCows; j++)
{
var cow = cows[j];
if (cow.isSick())
{ break pastureLoop; }
healthyCows++;
}
}
pastureLoop:
for (i = 0; i < pastureLen; i++)
{
var pasture = pastures[i];
var cows = pasture.getCows();
var j, numCows = cows.length;
for (j = 0; j < numCows; j++)
{
var cow = cows[j];
if (cow.isEating())
{ continue pastureLoop; }
}
// No cows were eating, so fire the callback for pasture[i]
pasture.executeCallback(); // or whatever
}
最接近的替代方案是非严格模式下的标签函数声明:
B.3.2标记函数声明
在ECMAScript 2015之前,
LabelledStatement
的规范不允许声明标签与FunctionDeclaration
的关联。但是,标记为FunctionDeclaration
的是非严格代码的允许扩展,大多数浏览器托管的ECMAScript实现都支持该扩展。在ECMAScript 2015中,LabelledStatement
的语法产生允许使用FunctionDeclaration
作为LabelledItem
,但13.13.1包含早期错误规则,如果发生这种情况则会产生语法错误。对于Web浏览器兼容性,通过添加带下划线的文本修改该规则:LabelledItem:FunctionDeclaration
It is a Syntax Error if any strict mode source code matches this rule.
这可用于创建无法访问的声明:
function show_alert()
{
label:
{
break label;
var foo = 1;
}
console.log(foo);
}
但可以通过字符串操作和函数构造函数访问它。
<强>参考强>