从子函数内部的父函数返回 - Javascript

时间:2014-01-08 15:07:32

标签: javascript

我对使用JavaScript进行编码比较陌生,而且我遇到了一个问题。我喜欢嵌套函数以保持有序,但是如何从子函数内部退出父函数?

示例:

function foo1() {
   function foo2() {
      //return foo1() and foo2()?
   }
   foo2();
}

3 个答案:

答案 0 :(得分:6)

请参阅折叠

下的更新

你做不到。您只能从子函数返回,然后从父函数返回。

我应该注意,在你的例子中,没有任何东西调用foo2 (编辑时,有些东西)。让我们看一个更实际的例子(以及一个出现的例子):假设我们想知道数组是否包含符合某个条件的条目。第一次刺伤可能是:

function doesArrayContainEntry(someArray) {
    someArray.forEach(function(entry) {
        if (entryMatchesCondition(entry)) {
            return true; // Yes it does           <-- This is wrong
        }
    });
    return false; // No it doesn't
}

你不能直接这样做。相反,您必须以匿名迭代器函数的形式返回,以阻止forEach循环。由于forEach没有提供这样做的方法,因此您使用some,这样做:

function doesArrayContainEntry(someArray) {
    return someArray.some(function(entry) {
        if (entryMatchesCondition(entry)) {
            return true; // Yes it does
        }
    });
}
如果对迭代器函数的任何调用返回some,则

true返回true(并停止循环);如果没有对迭代器的调用返回false,则返回true

同样,这只是一个常见的例子。


您在下面提到了setInterval,它告诉我您几乎肯定会在浏览器环境中这样做。

如果是这样的话,假设游戏与play以外的用户进行了任何互动,那么您的alert功能几乎肯定已经返回到您想要做的事情。 {1}}。这是因为环境的异步性质。

例如:

confirm

问题是,function play() { var health = 100; function handleEvent() { // Handle the event, impacting health if (health < 0 { // Here's where you probably wanted to call die() } } hookUpSomeEvent(handleEvent); } 几乎会立即运行并返回。然后浏览器等待您连接的事件发生,如果是,则触发play中的代码。但是handleEvent已经很久了。

答案 1 :(得分:2)

记下父函数是否也应该返回。

function foo1() {
    bool shouldReturn = false;

    function foo2() {
        shouldReturn = true;    // put some logic here to tell if foo1() should also return 
        return;
    }

    if (shouldReturn) {
        return;
    } else {
        // continue
    }
}

答案 2 :(得分:0)

根据你的评论,这样的事情可能会成为一个主要的游戏循环。

function play() {

var stillPlaying = true;
    while(stillPlaying) {
     ... play game ...
      stillPlaying = false; // set this when some condition has determined you are done
    }
}