for + setTimeout
10まで を数える。
for(var i = 1; i <= 10; i++) { setTimeout(function() { print(i); }, i * 1000); }
いっけん間違ってなさそうだけど 11 しか表示されない。タイムアウト後はすでにループを抜けて i は 11 になってるため。
for(var i = 1; i <= 10; i++) { setTimeout((function(i) { return function() { print(i) } })(i), i * 1000) }
これで OK.
タイムアウトがセットされた時点で外側の function は評価されて、タイムアウト後に返された function を実行てことかな。
http://la.ma.la/misc/userjs/amazon_gift.user.js より。
setTimeoutの第一引数は Function でなければならないことも重要。