试图在javascript中调用闭包函数

试图在javascript中调用闭包函数,javascript,closures,Javascript,Closures,我有一个计时器,我想先打电话 countdownTimer.start(600,/page2.html') 显示计时器从600秒开始倒计时后,它将重定向到page2.html 我还想通过调用以下命令(从cookie)恢复上一个计时器。我只是使用cookies将值保存在它停止的地方,因此如果刷新页面,它将恢复计数,而不是重新开始 countdownTimer.resume(123'/page2.html') 我得到了各种各样的错误,关于没有定义内部html(我假设这与没有调用函数顶部的变量有关)

我有一个计时器,我想先打电话

countdownTimer.start(600,/page2.html')

显示计时器从600秒开始倒计时后,它将重定向到page2.html

我还想通过调用以下命令(从cookie)恢复上一个计时器。我只是使用cookies将值保存在它停止的地方,因此如果刷新页面,它将恢复计数,而不是重新开始

countdownTimer.resume(123'/page2.html')

我得到了各种各样的错误,关于没有定义内部html(我假设这与没有调用函数顶部的变量有关)

有人能帮我理解如何创建这样的javascript对象吗?我一直很困惑:/

var countdownTimer = (function() {

    var elem = document.getElementById("countdown");
    var url     = '';
    var end     = 60;
    var _second = 1000;
    var _minute = 60000;
    var _hour   = 3600000;
    var timer;

    function pad (n, amount) {
        return n > parseInt(Array(amount).join("9")) ? "" + n : "0" + n;
    }

    function showRemaining () {
        var now = new Date().getTime();
        var distance = end - now;
        if (distance < 0 ) {
            clearInterval( timer );
            elem.innerHTML = "Offer Expired";
            window.location.href = url;
            return;
        }
        var minutes = Math.floor( (distance % _hour) / _minute );
        var seconds = Math.floor( (distance % _minute) / _second );
        var milliseconds = Math.floor( (distance % _second) );

        elem.innerHTML =  pad(minutes, 2) + ' <span>:</span> ';
        elem.innerHTML += pad(seconds, 2) + ' <span>:</span> ';
        elem.innerHTML += pad(milliseconds, 3);
    }

    var start = function (secondsToExpire, url) {
        url = url;
        end = new Date().getTime() + (secondsToExpire * 1000);
        timer = setInterval(showRemaining, 1);
    }

    var resume = function (customEnd, url) {
        url = url;
        end = customEnd;
        timer = setInterval(showRemaining, 1);
    }

    var currentTime = function () {
        return 500;
    }

    return {
        start: start,
        resume: resume,
        currentTime: currentTime
    };
})();    
var倒计时=(函数(){
var elem=document.getElementById(“倒计时”);
var url='';
var-end=60;
var_秒=1000;
var_分钟=60000;
var_小时=3600000;
无功定时器;
功能板(n,数量){
返回n>parseInt(数组(数量).join(“9”)?“”+n:“0”+n;
}
函数显示剩余(){
var now=new Date().getTime();
var距离=结束-现在;
如果(距离<0){
清除间隔(计时器);
elem.innerHTML=“报价已过期”;
window.location.href=url;
返回;
}
var分钟=数学楼层(距离%\u小时)/\u分钟);
var秒=数学楼层((距离%\u分钟)/\u秒);
var毫秒=数学地板((距离%_秒));
elem.innerHTML=pad(分钟,2)+':';
elem.innerHTML+=pad(秒,2)+':';
elem.innerHTML+=pad(毫秒,3);
}
var start=函数(secondsToExpire,url){
url=url;
end=new Date().getTime()+(secondsToExpire*1000);
定时器=设置间隔(显示剩余,1);
}
var resume=函数(customEnd,url){
url=url;
结束=结束;
定时器=设置间隔(显示剩余,1);
}
var currentTime=函数(){
返回500;
}
返回{
开始:开始,
简历:简历,
当前时间:当前时间
};
})();    

我猜它在抱怨
elem.innerHTML
未定义。这可能意味着由于某种原因,
elem
null
。也许代码是在DOM准备就绪之前运行的?或者该元素具有不同的
id
?你说得对。。。该函数的其余部分可以自动运行,但有一行除外