JavaScript/jQuery-拦截循环

JavaScript/jQuery-拦截循环,javascript,jquery,loops,for-loop,Javascript,Jquery,Loops,For Loop,我有一个网站和一个带有for循环的脚本,该循环使用变量(I) 因此,循环如下所示: var i; for(i=start_n;i<=end_n;i++){ //function to execute } 第二: $('#btnStop')。单击(函数(){ 停止加载=真; }); 对于(i=start\n;i您不能中断JS的执行。您最好让循环在setInterval内运行,并清除该间隔,但缺点是页面必须在每次迭代之间重新绘制,这样最多每秒可以得到60次迭代,而不是数百万次正常情况下。Fo

我有一个网站和一个带有
for
循环的脚本,该循环使用变量(
I

因此,循环如下所示:

var i;
for(i=start_n;i<=end_n;i++){
//function to execute
}
第二:

$('#btnStop')。单击(函数(){
停止加载=真;
});

对于(i=start\n;i您不能中断JS的执行。您最好让循环在
setInterval
内运行,并清除该间隔,但缺点是页面必须在每次迭代之间重新绘制,这样最多每秒可以得到60次迭代,而不是数百万次正常情况下。

For循环是阻塞和并发的,您可以通过使用某种超时(比如说每10毫秒运行一次)来“模拟”For循环,而不是使用For循环。然而,这并不能真正实现相同的功能


正如评论所说,javascript(在浏览器上)是单线程的,因此一旦进入for循环,在for循环结束之前不会发生其他任何事情。

您不能真正按照自己的意愿完成此操作,但可以用一点开销中断循环。例如,每次循环中都可以执行数据库请求(ajax)检查循环是否应中断。 然后,您可以有一个按钮,用于设置循环检查的“应中断”值


不过,我不确定这是否能按预期工作…

您是否尝试过设置间隔而不是for循环

例:


JavaScript是单线程的…如果循环正在运行,那么它正在运行,您无法停止它。您可以创建一个任务队列,并使用
setTimeout
异步处理它。唯一可能停止它的方法是将循环体放入
setTimeout
回调中,这可能需要进行重大重构。(编辑:Felix在他的编辑中击败了我!)我认为你可以设置一个全局变量,并在循环内部测试它。因此,按钮设置myobj.foo=false,你的循环可以检查(myobj.foo==false){break;}或类似的内容。因此,它将循环,直到你的I用完,或者我认为点击也可以将其破坏。
$('#btnStop').click(function(){
i=end_n;
});
$('#btnStop').click(function(){
stopLoading = true;
});

for(i=start_n;i<=end_n;i++){
if(stopLoading==true){break;}
//function to execute
}
var interval = setInterval(function(){ /*do something many times*/}, 99);
$('#stop').click(function(){ clearInterval(interval); });