2010-11-26 35 views
2
$.post (ajaxUrl, {action:'get_seconds_to_next_cron'}, function (data) { 
     countdown = data + 600; //is this in global scope now? 
     setInterval('updateClock();',1000); 
},'json'); 

function updateClock() { 
    countdown--; 
    console.log(countdown); //output for verification 
} 

嗨[第一次stackoverflow問題]上面是一個解決方案的購物車上的計時器鏈接到我們的服務器時間和cron工作。幫助避免全局命名空間 - 兩個例子 - 哪個更好?

我擔心倒計時成爲全局命名空間的一部分,因此沒有最佳實踐等

下面

是有點的測試代碼,試圖去了解不同設置的東西(也許)做清潔工作就範圍而言。

var myWrapper = { 
    count: 600, 
    passCount : 'myWrapper.myCount(' +this.count+ ')', 

    myCount: function() { 
    this.count--; 
    console.log(this.count); //output for verification 
    }, 

    setCounter: function() { 
    setInterval(this.passCount, 1000); 
    } 
    }; 

myWrapper.setCounter(); 

我的理解範圍是最好的,所以任何反饋都會很有趣,並且可能對我的理解有幫助。

謝謝。

+0

快速注:`setInterval`應避免,你總是需要在要清除的時間間隔的情況下保持周圍一個計時器ID,在這方面使用`setTimeout`更容易。 – 2010-11-27 00:22:09

+0

我會看看這個...... – SaminOz 2010-11-28 02:53:05

回答

3

您可以打開updateClock()anonymous functioncloses overcountdown

$.post(ajaxUrl, { action: 'get_seconds_to_next_cron' }, function(data) { 
    var countdown = data + 600; // This doesn't need to be global. 
    window.setInterval(function() { 
     countdown--; // Refers to the outer `countdown` variable. 
     console.log(countdown); 
    }, 1000); 
}, 'json');