修正
使い方setInterval
これは(後で説明する)正しいsetInterval()
使用方法です:
setInterval(cal, 5000);
このコードを書くための可能な方法
$(document).ready(function(){
var b = 0;
function cal() {
b++;
$('#print').html(b + '<br/>');
if (b === 4) {
clearInterval(to);
}
};
var to = setInterval(cal, 5000);
});
jsFiddleデモ
もちろん、まだ改善の余地があります。たとえば、キャッシュすることができます$('#print')
。毎回フェッチする必要はありません。
...
var $print = $('#print'); //save it to a variable
function cal() {
b++;
$print.html(b + '<br/>'); //use the cached version
...
問題
関数の代わりに文字列-> eval
!
技術的には、最初のパラメータとして文字列をに渡すsetInterval
ことができますが、を使用するのと同じeval
です。私たちが知っているように、それeval
は悪です。あなたが何をしているのかを本当に知っている場合にのみそれを使用してください。同じことが。にも当てはまりますsetTimeout
。w3schoolsやその他の古いリソースで何を見たとしても、これらのメソッドに文字列を渡さないでください。関数を渡します。
eval
のスコープsetInterval
eval
withを使用する際の問題の1つはsetInterval()
、グローバルスコープの文字列でコードを実行しようとすることです。そのため、エラーが発生します。setInterval
で定義されwindow
、そのスコープ内で実行されます。に渡されたクロージャのスコープ内にdocument.ready()
あり、関数はこのスコープで定義されています。eval
それが存在しないグローバルスコープでそれを見つけようとします。