从子函数内部从父函数返回-Javascript
我对JavaScript的编码相对来说比较陌生,我遇到了一个问题。我喜欢嵌套函数以保持有序,但是如何从子函数内部退出父函数呢 例如:从子函数内部从父函数返回-Javascript,javascript,Javascript,我对JavaScript的编码相对来说比较陌生,我遇到了一个问题。我喜欢嵌套函数以保持有序,但是如何从子函数内部退出父函数呢 例如: function foo1() { function foo2() { //return foo1() and foo2()? } foo2(); } 请参见折叠下的更新 你不能。只能从子函数返回,然后从父函数返回 我应该注意到,在您的示例中,从来没有调用过foo2(在编辑时,有些东西确实调用了)。让我们看一个更真实的例子(经常出现
function foo1() {
function foo2() {
//return foo1() and foo2()?
}
foo2();
}
请参见折叠下的更新
你不能。只能从子函数返回,然后从父函数返回
我应该注意到,在您的示例中,从来没有调用过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
}
some
返回true
(并停止循环),如果对迭代器函数的任何调用返回true
;如果没有对迭代器的调用返回true
,则返回false
同样,这只是一个常见的例子
您已经参考了下面的
setInterval
,它告诉我您几乎肯定是在浏览器环境中这样做的
如果是这样,你的play
功能几乎肯定在你想做你正在谈论的事情的时候已经返回了,假设游戏除了alert
和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);
}
函数播放(){
var健康=100;
函数handleEvent(){
//处理事件,影响健康
如果(健康状况<0{
//这是你可能想称之为die()的地方
}
}
hookUpSomeEvent(handleEvent);
}
问题是,
play
几乎会立即运行并返回。然后浏览器会等待您连接的事件发生,如果发生,它会触发handleEvent
中的代码。但是play
早就返回了。请注意父函数是否也应该返回
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
}
}
你对我能做的事情有什么建议吗?这取决于我们对“return”的理解。引发异常会传播。返回bool(true/false),这取决于函数是否成功,然后让父函数决定下一步要做什么。我不需要设置一个setInterval或一些东西来持续检查吗?@user3025700:如果你正在做类似的事情,你的
播放将已经返回。如果没有更多示例代码,很难想象原因任何人都会想试试这个。这个示例代码甚至没有编译。我正在制作一个游戏…我所有的游戏代码都在“play()”中,在play中我希望函数“die()”停止“play()”。我正在制作一个游戏…我所有的游戏代码都在“play()”中,在play中我希望函数“die()”停止“play()”如果您的游戏涉及到与外界的交互,那么当您决定某些东西应该“消亡”时,play
似乎不太可能仍在运行,因为大多数JavaScript环境(包括浏览器)都采用异步方式处理用户发起的事件。这个游戏在什么环境下运行?这不能生成一个使浏览器崩溃的循环吗?
function play() {
var stillPlaying = true;
while(stillPlaying) {
... play game ...
stillPlaying = false; // set this when some condition has determined you are done
}
}