2016-09-11 5 views
3

私は基本的なJSトリック質問を投稿しようとしていた、そしてそれは明らかにあまりにも私をだましています:)なぜこのコードは連続した数字を出力しますか?

実行して、このコンソールで:

x = (w) => w.length; 
setTimeout(console.log(x), 0); 

ザ・、あなたがsetTimeout(console.log(x), 0);を実行するたびに、あなたが増加数を取得します。何故ですか? windowオブジェクトへの参照先は、wではありませんか?

+1

これはwを増やすように見えます。簡略化 'let x = w + w' – zer00ne

+0

@ zer00neしかし、' w'は変数ではなく、単に他の変数を参照するパラメータです。おそらく 'window'オブジェクトでしょう。なぜ関数を呼び出すのが何かを増やすのだろうか? – Cristy

+0

@selfどんなコンテキストですか?これはすべてのコードで、ブラウザのコンソールで新しいタブで実行します。 – Cristy

答えて

10

setTimoutは値を返します。 clearTimeout呼び出しの引数として使用できるsetTimeoutの戻り値であるタイマーIDが表示されています。

返されるtimeoutIDは、0から255までの数字で、setTimeout()の呼び出しによって作成されたタイマーであることを示します。タイムアウトをキャンセルするには、この値をWindow.clearTimeout()に渡した にすることができます。 [0]

[0] https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout

wパラメータは、ウィンドウ・オブジェクトを参照しないであろう。 console.logは未定義を返すので、あなたの関数は決して呼び出されません。

+0

ああ、私の神様、あなたは正しいです。私はいつもそれがログに記録された値だと思っていましたが、実際に 'x'関数を記録していたコンソールの' function ... 'ログを無視していました。 :) – Cristy

+1

Tbh、これは実際には気づくのがかなり難しいです、あなたがそこにいる素晴らしいバグスポットテクニック:D – Cristy

+1

それは助けてくれてうれしい! –

関連する問題