DRYな備忘録

Don't Repeat Yourself.

setInterval関数が、第一引数の関数を呼ばない【Javascript】

【問題】

var i = 0;
function jack(){
    if( i == 10 ){
        clearInterval( dummyInterval );
    }
    console.log( i );
    i++;
}
function myCounter(){
    var dummyInterval = setInterval("jack()",1000);
}
$("#hoge").click( function(){
    myCounter();
}

を実行し、クリックすると、

ご丁寧に1000ミリ秒ごとに

Uncaught ReferenceError: jack is not defined    

と伝えてくれる。

 

【解決】

var dummyInterval = setInterval("jack()",1000);

var dummyInterval = setInterval( jack ,1000);

とした。

 

【雑感】

http://www.pori2.net/js/timer/1.htmlhttp://www.scollabo.com/banban/java/jvsample_014.html

を参考にしていたが、どれも

"関数名"という表記だった。

ここhttp://stackoverflow.com/questions/7773610/javascript-console-uncaught-referenceerror-settimeout-is-not-defined-anonymou

ではじめて生の関数名を試した。

他にも

setInterval( "jack", 1000);

setInterval( "jack()", 1000);

は両方とも1秒ごとにReferenceError、

setInterval( jack(), 1000);

はむしろピクリとも動かなかった。

とりあえず動いたのは

setInterval( jack, 1000);

のみだった。

関数の宣言は、

var jack = function(){

であっても

function jack(){

であっても結果は変わらなかった。