什麼命令我必須使用,要走出的for循環,也是從//code inside
跳直接到//code after
歇循環從在Javascript
//code before
for(var a in b)
{
switch(something)
{
case something:
{
//code inside
break;
}
}
}
//code after
什麼命令我必須使用,要走出的for循環,也是從//code inside
跳直接到//code after
歇循環從在Javascript
//code before
for(var a in b)
{
switch(something)
{
case something:
{
//code inside
break;
}
}
}
//code after
不幸的是,Javascript沒有允許break
通過多個級別。要做到這一點,最簡單的方法是創建一個匿名函數來利用return
語句的功率:
//code before
(function() {
for (var a in b) {
switch (something) {
case something:
{
//code inside
return;
}
}
}
}());
//code after
這工作,因爲return
離開的功能,因此隱退出循環,直動你code after
我覺得像一個匿名函數是這種事情矯枉過正。另外,取決於for/switch的細節,我可能會略過代碼並看到一個'return',而不是將它與匿名函數關聯起來(稍後讓維護更加困惑)。現在,當然,這不是一段複雜的代碼,但是在整個實踐中應用這個代碼可能會變得很難。 –
@BradChristie我不確定匿名函數是多麼大的一件大事!至於可讀性,這就是評論的意思,當然......重構可能是理想的,但這是離開循環的最簡潔的方式。 – lonesomeday
沒有戲劇性,但我[仍然看到不同](http://jsperf.com/exiting-nested-switch-within-for-in)。 –
使用另一個變量來標記,當您需要退出:
var keepGoing = true;
for (var a in b){
switch (something){
case something:
keepGoing = false;
break;
}
if (!keepGoing) break;
}
@downvoter:什麼給?完全可以接受的(儘管'break'允許一個'label'參數,我個人認爲標籤與BASIC一起出現,並且導致[意大利麪代碼](http://en.wikipedia.org/wiki/Spaghetti_code)...) –
這取決於你想要完成的任務......有一件事我通常做的是這樣的:
//code before
for(var a in b)
{
var breakFor = false;
switch(something)
{
case something:
{
//code inside
breakFor = true;
break;
}
}
if (breakFor)
break;
}
//code after
Jeff是第一個使用bool var來完成此操作的人,其他用戶使用相同的語句獲得更多upvotes。爲什麼? – Eduardo
我總是發現使用條件語句最簡單的方法來控制代碼流,至少在概念上。
var done = false;
//code before for loop
for(var a in b){
switch(switchParameter){
case firstCase:
//code inside
done = true;
break;
}
}
if(done)
break;
}
//code outside of for loop
你可以知道哪個環路/開關斷開。
function foo()
{
dance:
for(var k = 0; k < 4; k++){
for(var m = 0; m < 4; m++){
if(m == 2){
break dance;
}
}
}
}
參見this answer。
for(var i=0; i<b.length; i++) {
switch (something) {
case 'something1':
i=b.length;
}
}
當迭代變量i
到達循環結束時,它會中斷。但是可以強制迭代變量到達循環的結尾。
這個代碼最好包含一些解釋,尤其是因爲還有其他六個答案。 – EJoshuaS
這並不能解決問題,因爲當'i = b.length'時代碼會再運行1次。而且,如果'i'設置爲低於'b.length',那將是非常危險的,它將永遠運行!!!所以我建議我們應該用功能,標籤或標誌代替這個。 –
在switch語句的關閉'}'之後加上'break;'。 – War10ck
你可能會考慮重構你的解決方案。 – Mahdi
@JaakKütt永遠不要碰我的縮進樣式。 – BASILIO