teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

おまけ追加

2018/09/14 06:20

投稿

miyabi-sun
miyabi-sun

スコア21461

answer CHANGED
@@ -22,4 +22,29 @@
22
22
  // 3行経過したらisTestingを取り下げる
23
23
  setTimeout(function(){ isTesting = false; }, 3000);
24
24
  }
25
+ ```
26
+
27
+ ---
28
+
29
+ 【おまけ】更に凝った実装にしてみる
30
+
31
+ test関数はシンプルに保ちたいなぁと思うのでラッピングしてみました。
32
+
33
+ ```JavaScript
34
+ var delay = function (fn, time) {
35
+ var isDoing = false;
36
+ return function () {
37
+ if (isDoing) return;
38
+ isDoing = true;
39
+ fn();
40
+ setTimeout(function(){ isDoing = false; }, time);
41
+ }
42
+ }
43
+ var test = delay(function () {
44
+ console.log('do test');
45
+ }, 3000);
46
+
47
+ test(); // "do test"が出力
48
+ test(); // すぐに再実行したので何も出力されない
49
+ setTimeout(test, 3500); // 3秒程経ってから"do test"が出力された
25
50
  ```