停止javascript中的函数

停止javascript中的函数,javascript,Javascript,我实现了一个ResetTime函数,一旦调用某个模式,我就需要停止该函数。ResetTime功能用于会话超时。每次有用户交互时,时间都会重置 ResetTime功能 function ResetTime() { timer = SetLastResetTimeStamp((new Date()).getTime()); } function SetLastResetTimeStamp(timeStamp) { if (_localStorage) { _loc

我实现了一个
ResetTime
函数,一旦调用某个模式,我就需要停止该函数。
ResetTime
功能用于会话超时。每次有用户交互时,时间都会重置

ResetTime
功能

function ResetTime() {
    timer = SetLastResetTimeStamp((new Date()).getTime());
} 

function SetLastResetTimeStamp(timeStamp) {
    if (_localStorage) {
        _localStorage[_localStorageKey] = timeStamp;
    } else {
        _lastResetTimeStamp = timeStamp;
    }
}
用户交互检查:

AttachEvent(document, 'click', ResetTime);
AttachEvent(document, 'mousemove', ResetTime);
AttachEvent(document, 'keypress', ResetTime);
AttachEvent(window, 'load', ResetTime);

是否有方法停止另一个函数中的
ResetTime
函数

由@Phiter建议的解决方案将起作用,即,您可以在包含标志
modalIsOpen
的范围内定义
ResetTime
,然后定义如下:

function ResetTime() {
  if (modalIsOpen) {
    return;
  }

  timer = SetLastResetTimeStamp((new Date()).getTime());
}
但是,我认为在模态打开时分离事件,在模态关闭时重新连接事件会更干净。这将首先阻止函数被调用。即,假设您有两个函数
onModalOpen
onModalClose
和一个
DetachEvent
函数,用于从相应的
EventTarget
中删除事件:

const onModalOpen = () => {
    DetachEvent(document, 'click', ResetTime);
    DetachEvent(document, 'mousemove', ResetTime);
    DetachEvent(document, 'keypress', ResetTime);
    DetachEvent(window, 'load', ResetTime);

    // ...
}

const onModalClose = () => {
    AttachEvent(document, 'click', ResetTime);
    AttachEvent(document, 'mousemove', ResetTime);
    AttachEvent(document, 'keypress', ResetTime);
    AttachEvent(window, 'load', ResetTime);

    // ...
}

注意:解除绑定和重新绑定事件处理程序并不是没有争议的(请参阅)


作为旁注,您不能在JavaScript(或大多数编程语言)中停止函数。您只能阻止它们被执行(例如,通过提前返回、抛出错误或根本不首先调用它们。)

如果(模态打开)返回if driving->don't hold phone
,因此在代码中,设置条件也是合乎逻辑的。您需要使用
if
语句,然后设置应该首先调用函数的条件,或者如果不能在那里设置条件,那么您应该在函数本身中设置它,就像上面@Phiter所写的那样。也许解决方案是记录打开模式时的时间,并以某种方式更改业务逻辑。否则,解决方案将声明一个全局变量(相反,这是最糟糕的,因为它会污染全局命名空间),然后如果(modalIsOpen){myGlobVar=true}。在SetLastResetTimeStamp中检查myGlobVar,如果为false,则执行localstorage stuff,否则返回。这样,您就不需要分离并重新附加事件。这只是一个想法。。。