2016-05-29 37 views
-1

比方说,这个功能正在运行:如何在JavaScript中打破外部循环?

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

function someFunc() { 

    runningFunction = "someFunc"; 

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

     counter++; 

    } 

} 

,我想打破,说在一个window.resize检测

$(window).resize(function() { 

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

} 

我怎么能这样做?我可以写一些函数正在运行的变量,如上所示。

+1

JavaScript有**运行到完成**语义。这意味着'someFunc'会阻止一切,直到返回。如果您想要实现非阻塞行为,请仔细查看异步编程,**事件循环**和**抢先式多任务**。 – rand

+0

@Iven感谢这一点,我会阅读了关于这一点,我需要做这项工作,否则我的工作会有尽管是一个语言问题的已知漏洞。 – joehungjohn

+0

为什么不直接在for循环中添加一个条件break?:if(ready){break; } –

回答

3

你不能。函数中的所有代码都将在块中运行。其他代码如resize事件侦听器将等待函数完成。

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

var timer, 
 
    counter = 0, 
 
    result = document.getElementById('result'); 
 
function someFunc() { 
 
    counter++; 
 
    result.textContent = counter; 
 
    if(counter < 1e5) timer = setTimeout(someFunc, 0); 
 
} 
 
someFunc(); 
 
document.getElementById('stop').addEventListener('click', function() { 
 
    clearTimeout(timer); 
 
});
Counter: <span id="result"></span><button id="stop">Stop counter</button>

+0

的问题是,我试图阻止动画以调整大小/重新定位的元素,然后重置动画...因为现在,这些元素不调整因为你们说,该动画来完成,而这些动画已经被分解成细分市场。但是每个细分市场本身都无法停止。那么我会得到这些巨大/不合适的元素。 – joehungjohn

+0

哇,这太好了,这可能是解决这个问题的唯一方法,如果是的话,非常感谢。我会试着理解你的代码,然后在我的代码中实现它。再次感谢。直到现在我还没有听说过ClearTimout。 – joehungjohn

+0

'clearTimeout'从队列中移除一个'setTimeout'定时器。 – Oriol