2013-03-08 195 views
0

是否有退出已調用當前正在執行的函數的函數的方法?如何在javascript中退出調用函數

一個例子是:

function doOneTwoThree(){ 

    doStuff(1, print); 

    doStuff(2, print); 

    doStuff(3, print); 

} 

function doStuff(parameter, aFunction){ 

    if(parameter === 2) { 
     //exit from doOneTwoThree 
    } 

    aFunction(parameter); 
} 

function print(something){ 

    console.log(something); 

} 

另一種選擇是在doStuff返回一個錯誤,並在每doOneTwoThree我打電話doStuff時檢查這個錯誤。但我想不是每次都檢查它...

+0

'回報;'我親愛的:) – kidwon 2013-03-08 15:25:04

+0

你總是可以只扔目的的JavaScript錯誤。 – 2013-03-08 15:25:41

+0

'return'會返回到調用函數,但?或者我誤解了? – 2013-03-08 15:25:43

回答

2

你可以使用throw和趕上doOneTwoThree錯誤拋出:

function doStuff(parameter, aFunction) { 
    if (parameter === 2) { 
     throw "error"; 
    } 
} 

function doOneTwoThree() { 
    try { 
     doStuff(1, print); 
     doStuff(2, print); 
    } 
    catch (error) { /* handle here */ } 
} 

然而,如果你不扔實際錯誤/異常,您應該使用而不是來控制您的代碼流。相反,您應該檢查doStuff電話的返回值以確認您可以繼續。如果這聽起來對你不乾淨,你也可以按照doStuff的方式做一些事情,或者根據doStuff的返回值調用它們。

0

嘗試這樣?返回一個令牌/魔法值? (像「週刊」的字符串可能是一個壞的道理,但它使我發笑,使用int代替)

function doOneTwoThree(){ 

    if (doStuff(1, print) === "eek") return; 

    doStuff(2, print); 

    doStuff(3, print); 

} 

function doStuff(parameter, aFunction){ 

    if(parameter === 2) { 
     return "eek"; 
    } 

    aFunction(parameter); 
}