如何在函数内部的 for 循环中退出(跳出)该函数?

10

这是一道理论问题,旨在了解嵌套循环或其他控件和函数中可以应用多少个转义(return或exit)。

我对此感到困惑,因为我陷入了代码中 如何同时从for ... each循环和方法中退出?

我无法停止迭代select元素中的option

我已经尝试过returnreturn false,但没有成功。

通常我们怎样做呢?

function() {
    for (...) {
        if (...) {
            $(...).each(function() {
               // You have to exit outer function from here
            });
        }
    }
}

你正在使用哪种编程语言?PHP吗? - What have you tried
根据他帖子中的链接,我会说是jQuery。 - Toon Casteele
Sorry @Evan javascript. - caglaror
我认为你可以使用 "return false"。 - PSR
@PSR 我使用了 return false。 @nalply 是的,我使用了 each() - caglaror
6个回答

10

在循环之间使用共享变量。如果想要退出,请在each()循环结束时将其翻转为true, 并在for-loop循环结束时检查其是否为true。 如果是,就跳出循环。


是的,@Konstantin D这将解决我的问题。但我们是否可以说没有直接的解决方案? - caglaror
2
@caglaror 我会说是的。 - Konstantin Dinev

4
我会这样做:
  • Create a boolean variable to check on each loop, and if the variable is true, then exit the loop (do this for each).

    var exitLoop = false;
    
     $(sentences).each(function() {
        if(exitLoop) {return;}
        var s = this;
        alert(s);
        $(words).each(function(i) {
        if(exitLoop) {return;}
            if (s.indexOf(this) > -1)
            {
                alert('found ' + this);
                throw "Exit Error";
            }
        });
    });
    

注意,这不是正确使用try-catch的方式,因为try-catch应严格用于错误处理,而不是跳转到代码的不同部分-但对于您所做的事情,它将起作用。

如果return不能满足您的需求,请尝试使用try-catch

try{
$(sentences).each(function() {
    var s = this;
    alert(s);
    $(words).each(function(i) {
        if (s.indexOf(this) > -1)
        {
            alert('found ' + this);
            throw "Exit Error";
        }
    });
});
}
catch (e)
{
    alert(e)
}

这段代码来自这个答案


这段代码运行正常,没有任何理由给它点踩。可以解释一下吗? - What have you tried
1
应该使用try catch来处理错误,而不是用它来跳转到脚本的不同部分。 - What have you tried
@nalply,我已经编辑过了,说实话我不确定你想要什么。 - What have you tried
让我们在聊天中继续这个讨论。点击此处进入聊天室 - nalply

1
循环也可以通过更改迭代器值来退出。
var arr = [1,2,3,4,5,6,7,8,9,10];

for(var i = 0;i<arr.length;i++){

  console.log(i);
  compute(i);

  function compute(num){
    //break is illegal here
    //return ends only compute function
    if(num>=3) i=arr.length;
  }

}

但是嵌套循环呢?内部循环将继续迭代。 - caglaror

0

不是最理想的,但你可以这样做

let result = false;
function() {
    for (...) {
        if (...) {
            $(...).each(function() {
                result = true;
               
            });
        }
    }
    if (result == true){
        return;
    }

}

0

-1

请问给我投反对票的人,我的回答哪里有错误了吗? - Toon Casteele
如果i的点写了注释,我们在break;代码处中断,会提示该处的break是非法的。 - caglaror
我不知道您是否意识到,但 for each() 不是JavaScript代码。至少我不知道。 - Toon Casteele
我之前说过这句话。wc3schools.com上的并非一切都是错的。如果我贴出的链接包含正确的信息,请不要关闭它。 - Toon Casteele

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接