如何在Javascript中从外部中断循环?

如何在Javascript中从外部中断循环?,javascript,Javascript,假设此函数正在运行: var runningFunction = "none", foo = 1000, counter = 0; function someFunc() { runningFunction = "someFunc"; from(var i = 0; i < foo; i++) { counter++; } } 我该怎么做?我可以向某个正在运行函数的变量写入数据,如

假设此函数正在运行:

var runningFunction = "none",
    foo             = 1000,
    counter         = 0;

function someFunc() {

    runningFunction = "someFunc";

    from(var i = 0; i < foo; i++) {

        counter++;

    }

}

我该怎么做?我可以向某个正在运行函数的变量写入数据,如上所示。

您不能。函数中的所有代码都将在一个块中运行。其他代码(如resize event listeners)将等待函数完成

如果你真的想“暂停”它,你需要将它分成不同的函数,并使用
setTimeout
调用下一个函数。这将允许其他代码在中间运行。

var定时器,
计数器=0,
结果=document.getElementById('result');
函数someFunc(){
计数器++;
result.textContent=计数器;
如果(计数器<1e5)计时器=设置超时(someFunc,0);
}
someFunc();
document.getElementById('stop')。addEventListener('click',function(){
清除超时(计时器);
});

Counter:Stop Counter
Javascript已运行到完成语义。这意味着
someFunc
将阻止所有内容,直到返回。如果您想要非阻塞行为,请更仔细地研究异步编程、事件循环和抢占式多任务处理。@Iven对此表示感谢,我会仔细阅读,我需要让它工作,否则我的工作将有一个已知的缺陷,尽管这是一个语言问题。为什么不在for循环中添加一个条件中断?:If(ready){break;}@LeonPlata但在函数完成之前,外部代码将无法更改
ready
。问题是我试图停止动画,以便调整/重新定位元素的大小,然后重置动画。。。因为现在,元素不会调整大小,因为正如你们所说的,动画必须完成,而这些动画已经被分割成了片段。但每个环节本身都无法停止。然后我得到了这些巨大的/不合适的元素。哇,这太棒了,这可能是这个问题的唯一解决方案,如果是的话,非常感谢。我将尝试理解您的代码,然后在我的代码上实现它。再次感谢。到目前为止,我还没有听说过clearTimeout。
clearTimeout
从队列中删除了一个
setTimeout
计时器。很抱歉,请您解释一下这行代码:if(counter<1e5)timer=setTimeoutsomeFunc,0);那是什么?这是一个if语句和一个变量声明的组合吗?我以前从未见过这种情况。我得到1e5是指数表示法。我看不到if(计数器<1e5)后面的开口括号没有说明它是错误的,因为它显然是有效的。谢谢。
setTimeout(someFunc,0)
创建一个计时器,以便尽快异步执行
someFunc
。它返回一个计时器ID,该ID分配给
timer
变量,以便可以使用
clearTimeout
取消计时器。所有这些都封装在
if
语句中,如果只有一条语句,则括号是可选的。如果愿意,请使用
if(计数器<1e5){timer=setTimeout(someFunc,0);}
$(window).resize(function() {

    // break someFunc function
    // say scenario broke at count = 595

}