Javascript 帮助避免全局命名空间-两个示例-哪一个更好?

Javascript 帮助避免全局命名空间-两个示例-哪一个更好?,javascript,Javascript,您好[第一个stackoverflow问题]以上是一个解决方案,用于链接到我们的服务器时间和cron作业的购物车上的计时器 我担心倒计时会成为全局名称空间的一部分,因此不是最佳实践等等 下面是一段测试代码,它尝试以不同的方式进行设置,以便(也许)在范围方面做更干净的工作 $.post (ajaxUrl, {action:'get_seconds_to_next_cron'}, function (data) { countdown = data + 600; //is this

您好[第一个stackoverflow问题]以上是一个解决方案,用于链接到我们的服务器时间和cron作业的购物车上的计时器

我担心倒计时会成为全局名称空间的一部分,因此不是最佳实践等等

下面是一段测试代码,它尝试以不同的方式进行设置,以便(也许)在范围方面做更干净的工作

$.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
}
我对范围的理解充其量是中等的,因此任何反馈都将是有趣的,并可能有助于我的理解


谢谢

您可以将
updatelock()
转换为
倒计时的

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();

快速提示:
setInterval
应该避免,你总是需要保留一个计时器id,以防你想清除时间间隔,在这方面使用
setTimeout
更容易。这就是我想要的@Frederic-漂亮干净。谢谢。一个快速的问题@Frederic-没有()可以让匿名函数启动-是因为setInterval()方法显式调用第一个参数,所以没有必要吗?@SaminOz,是的,
setInterval()
方法本身调用传递的函数。我们只需要给它一个可以调用的函数,而不是自己调用它。
$.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');