2016-05-11 11 views
0

何回呼び出しても、Javascriptで1回だけ関数を実行します。 次のコードを記述しても動作しません。関数をJavascriptで1回だけ実行します。

var counter = 0; 

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

この特定の機能については、カウンタは必要ありません。 'setTimeout'は一度だけ実行します。このコードブロックを複数回実行している場合、それは別の問題です。 –

+2

'var counter = 0;'は 'setTimeout'が宣言されているのと同じスコープになっています –

+0

あなたはこの機能について話していますか? setTimeoutコールバック関数またはr.frontPlayer.seekTo(10)? setTimeoutコールバック関数は、コードブロック全体が再度実行されない限り、一度だけ実行されます。 – Saad

答えて

1

は、彼らが不幸と苦しみを招待し、タイムアウトを使用しないようにしてください。これは簡単な例ですが、私はイベントをアタッチするためにjqueryを使用しますが、この関数はjqueryから独立しています。重要なのは、オブジェクトを使用して、この場合は無名関数を使用して状態を追跡することです。

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

$("#testButton").click(function() { 
    if (null == this.ran) { 
    console.log("do something"); 
    this.ran = true; 
    } 
}) 
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; 
    }; 
})(); 
+4

本当ですか?あなたは彼に、これだけのために図書館を使うことを望んでいますか? – Mikey

+0

@Mikey "polyfill"を投稿する前に誤ってsubmitを押した – andlrc

関連する問題