Re: [問題] function 裡的 setTimeout 與 變數

看板Ajax作者 (冒牌費大公)時間15年前 (2008/10/07 15:49), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串6/6 (看更多)
※ 引述《xam (聽說)》之銘言: : ※ 引述《TonyQ (沉默是金)》之銘言: : : 前者在eval的時候是設了一個全域變數 isWait , : : 而後者讀到的時候 , 區域變數 isWait 已經不可見 , 所以出現undefined. : : 建議是採用function的方案來保存scope. : : ex. : : function b() { : : var isWait = true; : : setTimeout(function(){alert(isWait);}, 3000); : : } : 我也想請教一下, 跟前一篇的問題類似 : 如果我要用 setTimeout() 作排程, 一次設定多個 event 要怎麼作? : 例如我有以下資料 : var s = [[10, "Hello"], [15, "World"], [3, "Hi"]]; : 想要在 3 秒後顯示 Hi : 10 Hello : 15 World : 下面這樣的作法只能處理最後一筆, 換成 function 也一樣 : for(i in s) : { : setTimeout("alert(s[i][1])", s[i][0]*1000); : } : 目前的是用, 可行,但是有點怪 : for(i in s) : { : callback = "alert('"+s[i][1]+"')"; : setTimeout(callback, s[i][0]*1000); : } 只要結果出得來,就可以吧? 另一個方法是你先對s做排序,另外加一個變數來track目前處理s的index 例如: var s = [[10, "Hello"], [15, "World"], [3, "Hi"]]; s.sort(function(a,b){return a[0]-b[0];}); var j = 0; for(var i in s) { setTimeout(function(){alert(s[j][1]);j++;},s[i][0]*1000); } -- Sapere Aude! 這就是啟蒙運動的口號! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.250.95.16

10/07 16:18, , 1F
這樣有比原本好一點..
10/07 16:18, 1F
文章代碼(AID): #18wnIZJY (Ajax)
討論串 (同標題文章)
文章代碼(AID): #18wnIZJY (Ajax)