最初のスニペットが間違っています。 console.log('hello')
がすぐに実行され、タイムアウトは何もトリガーしません。その例ではlog
はundefined
です。実行)
1:あなたは次のことを行うように指示されているため、2番目のスニペットは永遠にループし
var firstFunction = function(){
var log = function() { console.log('hello'); };
setTimeout(log, 2000);
}
firstFunction();
:ここ
は、実施例は次のようになります。ステートメントsecondFunction('test')
2)パラメーターを記録し、2秒間タイムアウトを設定します。
3)タイムアウト終了後、声明secondFunction('test')
4)のパラメータを記録し、2秒間のタイムアウトを設定を実行します。タイムアウトが終了すると、声明secondFunction('test')
を実行
5)...
n)は永遠に
var secondFunction = function(str){
console.log(str)
setTimeout("secondFunction('test')", 2000);
}
secondFunction('test');
お知らせを繰り返し、その最初の例では、タイムアウトがfirstFunction
を再度呼び出さなかった場合は、という関数を呼び出します、およびlog
は、別のタイムアウトコールバックを作成しないため、一度だけ実行されます。
**編集 - 関数パラメータとして文字列を使用しないで呼び出す方法**
また、これを文字列で呼び出すのはおそらく好ましくありません。関数への参照を使用して呼び出します。これは、関数log
が宣言され、setTimeoutに渡された最初の例で実証されています。しかし、 `firstFunction`がで` log`(つまり、何でも)関数を呼び出す - `secondFunction`はsetTimeoutメソッドで` secondFunction`呼び出すため
var thirdFunction = function(){
setTimeout(function() { console.log('Hello World'); }, 1000);
}
thirdFunction();
:しかし、あなたはまた、このようにそれを行うことができますsetTimeout –
タイムアウトは*タイムアウト*です。彼らは無期限に実行されません(あなたがそれらをクリアするまで)、**回**実行されます。 2番目の例の場合、タイムアウトは関数*を呼び出す*インターバル*( 'setInterval')の効果を無期限に呼び出します。 – Li357
最初の例でも、 'console.log'は何も返さないのでタイムアウトが間違って設定されています – Li357