function doesArrayContainEntry(someArray) {
someArray.forEach(function(entry) {
if (entryMatchesCondition(entry)) {
return true; // Yes it does <-- This is wrong
}
});
return false; // No it doesn't
}
function doesArrayContainEntry(someArray) {
return someArray.some(function(entry) {
if (entryMatchesCondition(entry)) {
return true; // Yes it does
}
});
}
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);
}
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
}
}
function play() {
var stillPlaying = true;
while(stillPlaying) {
... play game ...
stillPlaying = false; // set this when some condition has determined you are done
}
}
5条答案
按热度按时间bpsygsoo1#
不能,只能从子函数返回,然后从父函数返回。
我应该注意到,在您的示例中,没有任何东西调用
foo2
(在您编辑时,有些东西调用了)。让我们看一个更真实的示例(也是经常出现的示例):假设我们想知道一个数组中是否包含符合某个条件的条目,第一个stab可能是:你不能直接这么做,相反,你必须从匿名迭代器函数返回,以停止
forEach
循环,因为forEach
没有提供这样做的方法,所以你使用some
,它可以:如果对迭代器函数的任何调用返回
true
,则some
返回true
(并且停止循环);如果没有对迭代器的调用返回true
,则返回false
。同样,这只是一个常见的例子。
您在下面提到了
setInterval
,这告诉我您几乎肯定是在浏览器环境中这样做的。如果是这样的话,那么
play
函数几乎可以肯定在你想做你所谈论的事情的时候已经返回了,假设游戏与用户有除了alert
和confirm
之外的任何交互,这是因为环境的异步特性。例如:
问题是,
play
几乎会立即运行并返回,然后浏览器会等待您连接的事件发生,如果发生,它会触发handleEvent
中的代码,但play
早就返回了。yhxst69z2#
注意父函数是否也应该返回。
sh7euo9m3#
它只是说你不能在子函数中
return
父函数,但是我们可以做一个回调并让它发生。j8yoct9x4#
我们可以使用
Promises
来实现这一点:如果你想从父函数返回,那么就用
true
来解析sbdsn5lh5#
根据你的评论,像这样的东西可能会作为一个主要的游戏循环。