在Javascript中只运行一次函数

时间:2016-05-11 21:34:57

标签: javascript settimeout

在Javascript中只执行一次函数,无论它被调用了多少次。 我写了下面的代码,但没有用。

var counter = 0;

if(n.data === YT.PlayerState.BUFFERING) {
  setTimeout(function() {                 
    if(counter===0) {
      r.frontPlayer.seekTo(10);
      counter++;
  }}, 2000);
}                 

2 个答案:

答案 0 :(得分:1)

尽量不要使用超时,他们会带来痛苦和痛苦。这是一个简单的例子,我使用jquery来附加事件,但函数独立于jquery。关键是使用对象(在这种情况下是匿名函数)来跟踪状态。

<button id="testButton">
test
</button>

$("#testButton").click(function() {
    if (null == this.ran) {
    console.log("do something");
    this.ran = true;
  }
})

答案 1 :(得分:0)

查看下划线或lodash的_.once功能:

var fn = _.once(function() {
  console.log('this will only run once');
});

或者自己写一下:

var fn = (function() {
  var called = false;
  var ret;

  return function() {
    if (called) return ret;
    called = true;
    // do stuff
    // .. 
    ret = 'some return value';
    return ret;
  };
})();