我对JavaScript编码比较陌生,我遇到了一个问题.我喜欢嵌套函数以保持有序,但是如何从子函数中退出父函数?
例:
function foo1() {
function foo2() {
//return foo1() and foo2()?
}
foo2();
}
Run Code Online (Sandbox Code Playgroud)
请参阅折叠下的更新
你不能.您只能从子函数返回,然后从父函数返回.
我应该注意,在你的例子中,没有任何东西调用 (编辑时,有些东西).让我们看一个更实际的例子(以及一个出现的例子):假设我们想知道数组是否包含符合某个条件的条目.第一次刺伤可能是: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
}
Run Code Online (Sandbox Code Playgroud)
你不能直接这样做.相反,您必须以一种停止forEach循环的方式从您的匿名迭代器函数返回.既然forEach没有提供这样做的方法,你可以使用some,它可以:
function doesArrayContainEntry(someArray) {
return someArray.some(function(entry) {
if (entryMatchesCondition(entry)) {
return true; // Yes it does
}
});
}
Run Code Online (Sandbox Code Playgroud)
sometrue如果对迭代器函数的任何调用返回,则返回(并停止循环)true; false如果没有返回对迭代器的调用,它将返回true.
同样,这只是一个常见的例子.
你在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);
}
Run Code Online (Sandbox Code Playgroud)
事情是,这play将几乎立即运行和返回.然后浏览器等待您连接的事件发生,如果是,则触发代码handleEvent.但是play很久以来就回来了.
| 归档时间: |
|
| 查看次数: |
9469 次 |
| 最近记录: |