функция не определена при использовании setTimeout?

По какой-то причине я не могу повторить эту функцию. Как только он получает setTimeout, он выдает «uncaught referenceerror: getnumbers не определен» (где getnumbers — это просто имя переменной.

$(document).ready(function(){


    var getnumbers = {

        countDigit: function(){

            if (sessionStorage.counter=="NaN"){
                sessionStorage.counter="0";                                   
            }
            else {
                sessionStorage.counter=Number(sessionStorage.counter)+1;

            }

            $("#result").text("counter: " +sessionStorage.counter);

            setTimeout("getnumbers.countDigit()",3000);             

        },

        _init: function(){
            getnumbers.countDigit();    
        }
    };

    getnumbers._init();     

})
    

По иронии судьбы, если я обновляю страницу, счетчик работает, поэтому я знаю, что он просто застревает на этой одной строке. Что я мог упустить?

Спасибо!


person tlflow    schedule 16.03.2012    source источник
comment
stackoverflow.com/questions/3741503/   -  person    schedule 16.03.2012


Ответы (1)


setTimeout со строковым аргументом — это просто глобальный eval. Когда он пытается оценить getnumbers.countDigit(), он оценивается в глобальной области и больше не имеет доступа к getnumbers.

Решение. Не передавайте строку. Вместо этого попробуйте следующее:

setTimeout(getnumbers.countDigit, 3000);
person icktoofay    schedule 16.03.2012
comment
работал как шарм! Я пробовал то же самое, но забыл снять () - хороший улов! Спасибо! - person tlflow; 16.03.2012