2016-07-03 4 views
0

次のコードでは、setInterval()関数を使用して 'clock'を継続的に更新します。唯一の違いは、関数呼び出しsetInterval()です。一重引用符を使用した関数呼び出しと引用符なし

私は[シングルからの引用符なしに]

setInterval(updateTime(),1000); 

setInterval('updateTime()',1000); 

からのsetInterval引数を変更する、それが動作しません。誰も私にこれを説明することはできますか?

シングル引用:

<head> 
    <script> 
     function updateTime(){ 
      var today = new Date(); 
      var h = today.getHours(); 
      var m = today.getMinutes(); 
      var s = today.getSeconds(); 
      var now= h+':'+m+':'+s; 
      document.getElementById('timer').innerHTML = h+':'+m+':'+s;//set the text in 'timer' id below to the date 
      setInterval('updateTime()', 1000); //////SEE THIS LINE////// 
     } 
    </script> 
</head> 
<body> 
    <p id='timer'> Time </p> 
    <script> 
     updateTime(); 
    </script> 
</body> 

ません引用:

<head> 
    <script> 
     function updateTime(){ 
      var today = new Date(); 
      var h = today.getHours(); 
      var m = today.getMinutes(); 
      var s = today.getSeconds(); 
      var now= h+':'+m+':'+s; 
      document.getElementById('timer').innerHTML = h+':'+m+':'+s;//set the text in 'timer' id below to the date 
      setInterval(updateTime(), 1000);//////SEE THIS LINE////// 
     } 
    </script> 
</head> 
<body> 
    <p id='timer'> Time </p> 
    <script> 
     updateTime(); 
    </script> 
</body> 

テストのためのオンラインJSコンソールは、ここで見つけることができます:https://jsfiddle.net/

+0

があなたのjsfiddleリンクを修正するのに役立ちます希望;) – moped

+1

あなたが右の関数呼び出しを行っている第二に、あなたは文字列を使用していないときだけ関数への参照を渡すことになっているので、すなわちだけ'setInterval(updateTime、' –

+1

注: 'setInterval()'と 'setTimeout()'の違いは非常に重要です**関数内から 'setInterval()'を呼び出さないでください ' setInterval(updateTime、1000) '*関数の外で*関数内で' setTimeout(updateTime、1000)) '*を使用します。 – nnnnnn

答えて

1

は今、質問、なぜに来て()

せずに、この setInterval(updateTime, 1000); をやってみてください。それはしようとするため

関数名

場合、文字列とはそれがカッコすぐupdateTime()を実行しない理由を説明するために実行した場合のsetInterval機能コンテンツを評価ですは、intervalループでupdateTime関数の出力を実行します。何も返されていない場合は未定義となり、functioとして扱われます文字列を返す場合はnの名前。他のものは見落とされるか、エラーがスローされます。

6
setInterval('updateTime()', 1000); 

あなたはとのsetIntervalに文字列を渡しています最初の引数。関数参照を渡す必要があります

正しい方法

setInterval(updateTime, 1000) 
+0

ああ、私もあなたが答えたことに気が付かなかった –

+0

さらに、2番目の例では、OPは関数自体の代わりに関数の戻り値を渡しています – nem035

+0

関数参照を渡す必要はありません。あなたの答えで文字列をそのまま引用符で囲みます。 – nnnnnn

0

あなたは

setInterval(updateTime,1000); 

に2番目のコードを変更した場合、それが動作するはずです。その理由は、あなたの答えでupdateTime()がupdateTimeの戻り値をsetIntervalに渡している間に、あなたは関数ポインタを設定間隔に渡しているからです。

関連する問題