65706


10秒間のストップウォッチゲーム的なものを作っているプログラムなのですが、  
以下javascriptで

[code]

    var game = {
        startTime: null,
        displayArea: document.getElementById('display-area')
      };
      function start() {
        game.startTime = Date.now();
        document.body.onkeydown = stop;
        //stop()ではなく何故stop?
      }
      function stop() {
        var currentTime = Date.now();
        var seconds = (currentTime - game.startTime) / 1000;
        if (9.5 <= seconds && seconds <= 10.5) {
          game.displayArea.innerText = seconds + '秒でした。すごい。';
        } else {
          game.displayArea.innerText = seconds + '秒でした。残念。';
        }
      }
      if (confirm('OKを押して10秒だと思ったら何かキーを押して下さい')) {
        start();
      }
    
[/code]

markdownにも書いてあるように、その上のコードで、

[code]

    document.body.onkeydown = stop;
    
[/code]

とありますが、何故ここのstopはstop()としてはいけないのでしょうか？


CC BY-SA 4.0
2020-04-17T06:23:11.503
65704
2020-04-17T06:49:13.897
2020-04-17T06:30:39.487
32986
36869
question
javascript
Javascriptの関数の中で別の関数を呼び出すとき、関数名の右隣に括弧を付けない理由


`()` がついたものは関数呼び出しですが、 `()` がないものは関数自身を指します。

[code]

    document.body.onkeydown = stop;
    
[/code]

は `document.body.onkeydown` に `stop` を代入しています。

仮に

[code]

    document.body.onkeydown = stop();
    
[/code]

としてしまった場合は `document.body.onkeydown` に `stop関数の戻り値` を代入してしまうことになります。


CC BY-SA 4.0
2020-04-17T06:28:53.323
65706
2020-04-17T06:49:13.897
2020-04-17T06:49:13.897
9008
9008
65704
answer