作者fillano (冒牌费大公)
看板Ajax
标题Re: [问题] function 里的 setTimeout 与 变数
时间Tue Oct 7 15:49:52 2008
※ 引述《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
1F:→ xam:这样有比原本好一点.. 10/07 16:18