私はnode.jsに関する本を読んでいるうちに、javascriptを学び始めています。最初の例の1つでは、高次関数を示しています。javascriptでは、fooが関数の場合、foo()とfooの違いは何ですか?そして、高次関数にargとして渡されたときにどう違いますか?
setTimeout(function() {
console.log('2000 milliseconds have passed since this demo started');
}, 2000);
これはREPLで実行するときに機能します。それは2秒待ってから、私が与えた文字列を書き込む。
setTimeout(console.log('2000 milliseconds have passed since this demo started'),2000);
これはすぐに文字列をプリントアウト:
は、だから、私は同じ出力を生成する期待何かをやってみました。私はsetTimeoutがまだ待っていて、2秒後に何もしなかったと推測しています。何らかの理由で最初に文字列を印刷しました。私はそれを周りにもう少しを果たし、単なる文字列を出力する別の関数を作成しました:
function tester() {
console.log('tester function ran');
}
私は、その後のsetTimeoutの内部でこの関数を呼び出した:
setTimeout(tester(),2000);
それはまだ文字列を印刷テスター()で最初に出てから2秒待ってから何もしなかった。
私は、括弧を削除しようとした:
setTimeout(tester,2000);
は、これが "働いていました"。それは2秒間待ってからテスター()に文字列を印刷した。
ここで私の質問は、この文脈でテスター()とテスターの違いは何ですか?これは、高次関数setTimeout()の内部で関数に引数を渡すことができないことを意味しますか?もしそうなら、なぜですか?
foo()を使用しているとき - fooだけを使用しているときにメソッドを呼び出すと、後で呼び出されるメソッドへの参照が渡されます。 (あなたが設定した遅延が終了したら) –
... 1つは関数を呼び出し、もう1つはそうではありません....そしてはい、setTimeoutの関数に引数を渡すことができます。 –