将JavaScript解释器发送回代码顶部



说我有20行JS代码,我希望解释器仅执行一半代码(< 11行),然后停止,无功能和返回,或者不评论其余代码(我已经尝试了返回,请提前查看)。

第10行中的location.reload(true);是一个紧密的解决方案,但我正在寻找客户端站。

我的问题

在JavaScript中是否有 stop命令(或功能),要求解释器停止并表现得好像没有代码运行吗?

为什么我问

这个问题的背景是我在一个以上keydown事件中调用功能的问题。

给定keydown事件仅触发一次,我考虑将解释器发送回keydown事件被触发后触发后的开始,而没有刷新页面(对不起,如果看起来很荒谬,我是JS的新手,并且发现失败了。错误的来源)。

当然,以上问题与"为什么仅一次触发键盘事件"的问题不同,我已经在这里问过 - 这是上下文的链接。

防止XY问题

一方面,我想确保没有XY问题。另一方面,我不允许在此会议上链接到上面的上一个问题。

无论哪种方式,我都会很高兴知道我刚刚描述的内容(JS解释器的客户端停止)甚至在语言的当前版本中都是可能的。

注意:我决定在今天早些时候的一些评论(没有答案)之后仔细地重写这个问题,并且我最好确保该问题是有益的和公共的。

没有停止命令,但是在有长期运行的客户端操作之前,我经历了它的需要。

解决方案:

1)将问题分为小packets

2)确保您能够使function仅适用于activeMilliseconds毫秒:

function doStuff(packets, currentIndex, activeMilliseconds) {
    var start = new Date(); //Start of chunk
    while((currentIndex < packets.length) && (new Date() - start < activeMilliseconds)) {
        //Do something with packets[currentIndex]
        currentIndex++;
    }
    return currentIndex;
}

3)现在我们能够为activeMilliseconds毫秒工作,我们需要异步使用它:

//Define packets
var currentIndex = 0;
var intervalID = setTimeout(function() {
    If(currentIndex = doStuff(packets, currentIndex, activeMilliseconds) >= packets.length) clearInterval(intervalID);
}, totalMilliseconds);

节点: TotalMilliseConds> ActiveMilliseConds 应该是正确的。例如,如果totalMilliseconds为250,而activeMilliseconds为200,那么在每250毫秒内,块将持续200毫秒,浏览器每250毫秒每250毫秒就可以做50毫秒的东西,即使有很多工作要做。

4)确保工作停止以前的类似工作:

function doJob(packets, intervalID, activeMilliseconds, totalMilliseconds) {
        clearInterval(intervalID);
        //Define packets
        var currentIndex = 0;
        var intervalID = setTimeout(function() {
            If(currentIndex = doStuff(packets, currentIndex, activeMilliseconds) >= packets.length) clearInterval(intervalID);
        return intervalID;
    }, totalMilliseconds);
}

如果您将此想法用于关键事件,则它将停止以前的键盘,您最大的等待时间将是ActiveMilliseConds,这在我看来是可以接受的妥协。

也就是说,只有在您没有其他选择的情况下,应使用此方法。您需要知道JavaScript具有一个线程,因此,即使您在事件的先前实例仍在运行时触发函数执行,在另一个事件完成后,您的新事件也将依次执行。

最新更新