在javascript函数运行一次后,您能否更改其中的语句
我很难弄明白这一点。我想要xxp.run.pause();替换为xxp.run.play();在以下初始代码由用户执行一次操作后。我尝试过创建一个闭包,但我不确定是否设置正确。任何帮助都将不胜感激在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
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();
};
})()