基本:返回并停止JavaScript上的代码执行

基本:返回并停止JavaScript上的代码执行,javascript,Javascript,我写了这些简单的代码 function a() { function b() { function d() { if (/*required condition goes here and should stop execution of function a()*/) { return } }

我写了这些简单的代码

function a()
{
    function b()
    {
        function d()
        {
            if (/*required condition goes here and should stop execution of
              function a()*/)
            {
                return
            }
        }

        d()
    }
    function c()
    {
        alert ('c')
    };
    b();
    c();
}
我所期望的是,当满足函数
d()
上的必要条件时,执行会中止,并取消函数
c()
的执行。否则,在执行函数
b()

我该怎么做


编辑:我真正想知道的是,对于VB.Net上的“Exit Sub”这样的外部函数,如果“return”键colud立即终止,您可以将返回值用于内部函数,并将其用作标志

函数a(){
函数b(){
函数d(){
console.log('in d');
如果(真){
返回;
}
返回true;
}
console.log('in b');
返回d();
}
函数c(){
console.log('in c');
警报(“c”);
}
console.log('in a');
console.log(b()和&c());
}

a()
您要将处理应该停止的信息传递到
d
b
之外,并使用它来确定是否调用
c

function a() {
    function b() {
        function d() {
            if (/*some condition*/) {
                return false;       // ***
            }
            return true;            // ***
        }
        return d();                 // ***
    }

    function c() {
        alert('c')
    };

    if (b()) {                      // ***
        c();                        // ***
    }                               // ***
}
或者,您可以使用
d
throw:


…但是
a
会抛出而不是正常完成(尽管您可以添加
try
/
catch
)。另外,抛出的代价相对较高,并且不是用于正常的分支目的。

函数d
可能会返回一个值,稍后如果该值与预期值匹配,则返回该值。因此,这意味着'return'关键字不会立即停止外部函数的执行,与VB.Net上的“Exit Sub”类似?@BayuSadewa:
return
只退出您在其中使用的函数,而不退出其包含的函数。我99.99%确信,当你在另一个函数中使用lambda时,VB.Net中的
Exit Sub
是一样的(如果你在另一个函数中使用lambda,C.Net中的
return
肯定是一样的)。我将使用内部函数的值来确定是否调用容器/外部函数上的剩余函数,对吗@T.J.克劳德感谢你的回答,很好的解释。这是我最想知道的。不管怎样,我怎样才能将这个问题标记为已解决?我是这里的新手。@BayuSadewa:你点击你认为最能回答问题的答案旁边的复选标记。
b()&&c()
到底做什么?它是一个函数,检查第一个表达式,如果它有一个truthy值,则检查第二个表达式。在这种情况下,如果返回
undefined
false
,计算将停止。根据上面的代码片段,我们得到的是
b()
从其内部函数
d()
返回
true
,而
c()
将返回
undefined
,因为
c()
从未确定返回的内容。因此,
b()&&c()
的标志返回false。我说得对吗@ninascholzb返回d,d返回未定义
b()&&c()
从b返回
undefined
并返回这个值。哇,我错过了
d()
哈哈。那么,
警报('c')
呢。它从未被执行过。
function a() {
    function b() {
        function d() {
            if (/*some condition*/) {
                throw new Error();     // ***
            }
            return;
        }
        d();
    }

    function c() {
        alert('c')
    };

    b();
    c();
}