Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何退出javascript中的调用函数_Javascript - Fatal编程技术网

如何退出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
调用的返回值,以确认您可以继续。如果这听起来不干净,您也可以执行类似于chain
doStuff
调用的操作,或者根据
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);
}