// source:http://blog.abhiomkar.in/2010/07/03/javascript-code-challenge-by-dropbox-team/
// NOT correct
function countdown(num) {
for (var i = 0; i <= num; i += 1) {
setTimeout(function () {
document.writeln(num - i);
}, i * 1000);
}
}
countdown(5); // -1 -1 -1 -1 -1 -1
// Solutions to fix:
//1. use instance function insdie setTimeout()
function countdown1(num) {
for (var i = 0; i <= num; i += 1) {
setTimeout((function (m) {
document.writeln(num - m);
}(i)), i * 1000);
}
}
countdown1(5); // 5 4 3 2 1 0
//2. use bind() to bind the real-time 'num-i'
function countdown2(num) {
for (var i = 0; i <= num; i += 1) {
setTimeout(document.writeln.bind(document, num - i), i * 1000);
}
}
countdown2(5); // 5 4 3 2 1 0
//3. a solution to http://blog.abhiomkar.in/2010/07/03/javascript-code-challenge-by-dropbox-team/
var countdown3 = function (num) {
for (var i = 0; i <= num; i += 1) {
(function (i) {
setTimeout(function () {
document.writeln(num - i);
}, i * 1000);
})(i);
}
}
countdown3(5); // 5 4 3 2 1 0