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