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

时间:2010-11-26 23:52:30

标签: javascript

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

我对范围的理解充其量只是中间因素,所以任何反馈都会很有趣,并且可能对我的理解有所帮助。

感谢。

1 个答案:

答案 0 :(得分:3)

您可以将updateClock()转变为anonymous function countdown的{​​{3}}:

$.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');