如何退出javascript中的调用函数
是否有方法退出调用了当前正在执行的函数的函数 例如:如何退出javascript中的调用函数,javascript,Javascript,是否有方法退出调用了当前正在执行的函数的函数 例如: function doOneTwoThree(){ doStuff(1, print); doStuff(2, print); doStuff(3, print); } function doStuff(parameter, aFunction){ if(parameter === 2) { //exit from doOneTwoThree } aFunction
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
中返回一个错误,并在每次调用doStuff
时在doonwothree
中检查该错误。但是我不想每次都要检查它…您可以使用抛出并捕获错误抛出doOneTwoThree
:
function doStuff(parameter, aFunction) {
if (parameter === 2) {
throw "error";
}
}
function doOneTwoThree() {
try {
doStuff(1, print);
doStuff(2, print);
}
catch (error) { /* handle here */ }
}
但是,如果您没有抛出实际的错误/异常,则不应使用它来控制代码流。相反,您应该检查doStuff
调用的返回值,以确认您可以继续。如果这听起来不干净,您也可以执行类似于chaindoStuff
调用的操作,或者根据doStuff
返回值在循环中调用它们。尝试类似的操作吗?返回令牌/魔法值?(像'eek'这样的字符串可能是一个不好的标记,但我觉得有趣的是,使用int代替)
您总是可以故意抛出javascript错误。return
会返回调用函数吗?还是我误会了?不。。。实际上,您试图一次从调用堆栈中弹出两个堆栈帧,但您不能这样做。这正是@Daedalus所说的。我认为真正的解决方案是将参数检入方法doOneTwoThree中
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);
}