一度実行されると次の実行まで、三秒ほど間隔をあけたいです。
質問者さんが本当に知りたいのはこれですか?
[Javascript] ユーザーが入力を停止するまで.keyup()ハンドラーを遅延させる方法
これは「delayedCall」という技術で、「delayedCall JS」みたいなワードで検索をかけるといくつかヒットします。
そうではなく、単純に質問文の内容で知りたければ、
isTesting = false
みたいな「実行中だよ」と知らせてくれる変数を用意すればうまくいくでしょう。
JavaScript
1var isTesting = false;
2function test() {
3 // 1行目にこれを仕込んでおく
4 if (isTesting) return;
5 isTesting = true;
6
7 // 元々あった処理
8
9 // 3行経過したらisTestingを取り下げる
10 setTimeout(function(){ isTesting = false; }, 3000);
11}
【おまけ】更に凝った実装にしてみる
test関数はシンプルに保ちたいなぁと思うのでラッピングしてみました。
JavaScript
1var delay = function (fn, time) {
2 var isDoing = false;
3 return function () {
4 if (isDoing) return;
5 isDoing = true;
6 fn();
7 setTimeout(function(){ isDoing = false; }, time);
8 }
9}
10var test = delay(function () {
11 console.log('do test');
12}, 3000);
13
14test(); // "do test"が出力
15test(); // すぐに再実行したので何も出力されない
16setTimeout(test, 3500); // 3秒程経ってから"do test"が出力された