web-dev-qa-db-ja.com

setIntervalコールバックが1回しか実行されないのはなぜですか?

私が作ったこのカウンターはありますが、永遠に実行したいです、本当に簡単です、ここで何が間違っていますか?

function timer() {
  console.log("timer!")
}

window.setInterval(timer(), 1000)
63
computer_smile

SetIntervalの最初のパラメーターとして、関数参照の代わりに関数呼び出しを使用しました。次のようにします:

function timer() {
  console.log("timer!");
}

window.setInterval(timer, 1000);

または短くなります(ただし、関数が大きくなると読みにくくなります):

window.setInterval( function() {
  console.log("timer!");
}, 1000)
100
Koen Peters

setIntervalおよびsetTimeoutmustは次のようなコールバックで使用する必要があります。

_setInterval(timer, 1000);
_

または名前のない関数:

_setInterval( function() { console.log("timer!"); }, 1000 );
_

コードが機能しない理由-関数を引数として別の関数に引数として渡すときdoSomething ( someFunc() )関数の結果を渡しています。

関数がオブジェクトとして渡されるときdoSomething ( someFunc )コールバックを渡しています。この方法でsomeFuncが参照として渡され、呼び出し関数のどこかで実行されます。これは、他の言語の関数へのポインターと同じです。

よくある間違いは、 w3schools に示されているように、これら2つの関数を使用することです。これにより、evalが暗黙的に呼び出されます。

9
Bakudan