今天去现场面试,一公司要求现场写代码,要求实现一个倒计时(60S),当时想到了要用闭包,当时是这样写的:
for(var i=60;i>=0;i--) {
(function(j) {
setTimeout(function() {
console.log(j)
}, 1000)
})(i)
}
当时没想到60个数一起输出了出来,没有倒计时的效果,后来将时间改为
(60-j)*1000,就好了。
2.后来又发现一种方法
var count = 5;
(function() {
if(count >=0) {
console.log(count--);
setTimeout(arguments.callee,1000);
}
})()
arguments.callee 这种方法,因为它是个很大的对象,每次递归调用时都需要重新创建。影响现代浏览器的性能,还会影响闭包。
不能用怎么办?
3.
var count = 5;
(function fn() {
if(count >=0) {
console.log(count--);
setTimeout(fn,1000);
}
})()
完美解决!