修正
使い方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
evalwithを使用する際の問題の1つはsetInterval()、グローバルスコープの文字列でコードを実行しようとすることです。そのため、エラーが発生します。setIntervalで定義されwindow、そのスコープ内で実行されます。に渡されたクロージャのスコープ内にdocument.ready()あり、関数はこのスコープで定義されています。evalそれが存在しないグローバルスコープでそれを見つけようとします。