我提起了NWmatcher source code进行了一些轻快的早上阅读,并注意到我以前在javascript中从未见过的奇怪代码:
main:for(/*irrelevant loop stuff*/){/*...*/}
此代码段可在第441行的compileGroup
方法中找到(nwmatcher-1.1.1)
return new Function('c,s,d,h',
'var k,e,r,n,C,N,T,X=0,x=0;main:for(k=0,r=[];e=N=c[k];k++){' +
SKIP_COMMENTS + source +
'}return r;'
);
现在我想出了main:
自己在做什么。如果循环中有循环并希望跳到外循环的下一次迭代(不完成内部OR或外循环),则可以执行continue main
。例如:
// This is obviously not the optimal way to find primes...
function getPrimes(max) {
var primes = [2], //seed
sqrt = Math.sqrt,
i = 3, j, s;
outer: for (; i <= max; s = sqrt(i += 2)) {
j = 3;
while (j <= s) {
if (i % j === 0) {
// if we get here j += 2 and primes.push(i) are
// not executed for the current iteration of i
continue outer;
}
j += 2;
}
primes.push(i);
}
return primes;
}
这叫什么?
是否有任何浏览器不支持它?
除continue
以外还有其他用途吗?
答案 0 :(得分:4)
这是labeled continue。您也可以使用labeled break。它是ECMAScript 3以来的标准。它的工作方式与in Java基本相同。
答案 1 :(得分:1)
这只是使用标签来控制流量的一个例子。它是标准的一部分,据我所知,所有浏览器都支持它。
至于其他用途,请详细了解您可以使用它做什么(除了continue
,标签可以与break
一起使用):
Tutorialspoint - JavaScript Loop Control with break and continue