在javascript函数运行一次后,您能否更改其中的语句

在javascript函数运行一次后,您能否更改其中的语句,javascript,Javascript,我很难弄明白这一点。我想要xxp.run.pause();替换为xxp.run.play();在以下初始代码由用户执行一次操作后。我尝试过创建一个闭包,但我不确定是否设置正确。任何帮助都将不胜感激 doSkip: function() { XXP.run.removeListener('canper', XXP.Skip); XXP.run.currentTime = XXP.skipTo; XXP.run.pause(); // this is what I w

我很难弄明白这一点。我想要xxp.run.pause();替换为xxp.run.play();在以下初始代码由用户执行一次操作后。我尝试过创建一个闭包,但我不确定是否设置正确。任何帮助都将不胜感激

doSkip: function() {
    XXP.run.removeListener('canper', XXP.Skip);
    XXP.run.currentTime = XXP.skipTo;
        XXP.run.pause(); // this is what I would like to change
    }

您可以在某个地方设置一个标志,记录在以下情况之前是否调用了
doSkip
函数:

var hasSkip = false;

doSkip: function() {
    XXP.run.removeListener('canper', XXP.Skip);
    XXP.run.currentTime = XXP.skipTo;
    if (!hasSkip) {
        XXP.run.pause();
        hasSkip = true;
    }
    else {
        XXP.run.play();
    }
}

您可以使用一个持久变量将函数包装在IIFE中,该变量检查函数是否已暂停。这比在其他地方使用单独的变量有优势,因为
hasPausedOnce
仅用于
doSkip
函数-无需填充外部范围(这可能会让代码的读者担心
hasPausedOnce
是否会在其他地方更改)


提供有关您的bug的更多信息。同时添加标签。您正在使用的库等等。为什么不维护一个局部状态变量,它告诉您上一个操作是什么,您可以决定使用该变量运行哪个函数。而不是动态地调用函数。也许使用生成器?
doSkip: (() => {
  let hasPausedOnce = false;
  return function() {
    XXP.run.removeListener('canper', XXP.Skip);
    XXP.run.currentTime = XXP.skipTo;
    if (!hasPausedOnce) {
      XXP.run.pause();
      hasPausedOnce = true;
    } else XXP.run.play();
  };
})()