Javascript:只调用一次函数

use*_*418 1 javascript

这是一段代码:

if (lastPosition == 0) {
  callsomemethod(param);
}
Run Code Online (Sandbox Code Playgroud)

我有这种奇怪的情况,其中我必须调用函数callsomemethod(param); 即使if条件不止一次也是如此.换句话说,我想确保函数callsomemethod只被调用一次,即使if语句是多次为真.if语句中发生了更多的事情,为了简单起见,我刚把它们拿出来.

编辑::感谢所有的回复.不幸的是,这个方法都没有工作,因为if语句在函数内部,并且该函数被多次调用,所以一切都会再次初始化.该功能也在IIFE中.在第一次拍摄中没有让一切清晰的道歉.

提前致谢

ssu*_*ube 5

执行此操作的惯用方法是使用锁定变量,可选择通过闭包隐藏.最简单的例子是:

var done = false;
function callOnce(lastPosition) {
  if (lastPosition == 0 && !done) {
    done = true;
    callSomeMethod(lastPosition);
  }
}
Run Code Online (Sandbox Code Playgroud)

生成只能调用一次的函数,可以使用闭包并包装:

function wrapOnce(fn) {
  var done = false;
  return function (...args) {
    if (!done) {
      done = true;
      return fn.apply(this, args);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

(...args语法可能在旧浏览器中不起作用,应该用代码替换以验证arguments并传递它,为简洁起见我省略了)

这是像lodash一样的助手的基础.

由于JS只允许单个线程访问变量,因此这本身就是线程安全的(例如它适用),并且如果多个回调尝试使用once-ified方法,则不会中断.