16 回答

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超22個(gè)贊
setTimeout的作用是將指定的代碼段在指定的時(shí)間中加入執(zhí)行隊(duì)列。
簡(jiǎn)單的做法是使用setInterval。
你的代碼等價(jià)于:
window.onload = function() { var i = 0; for(var j = 0;j < 10;j++) { setTimeout(new Function(console.log(i)),10000*i); i++; } };
所以就直接執(zhí)行完了。
正確的寫法是:
window.onload = function() { var i = 0; for(var j = 0;j < 10;j++) { setTimeout(function(){console.log(i);i++;},10000*j); } };
?

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超14個(gè)贊
首先謝謝你的回答~其實(shí)setInterval的實(shí)現(xiàn)我已經(jīng)完成了,以下是完整代碼。我只是對(duì)setTimeout的相同功能實(shí)現(xiàn)比較好奇。而且重點(diǎn)是我沒有徹底弄明白,為什么我之前那樣寫setTimeout看不到延遲效果。
window.onload = function() { var i = 0; var bar = setInterval(test,1000); function test() { console.log(i); i++; if(i == 10) { clearInterval(bar); } } };

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊
@Iwillknow:?要實(shí)現(xiàn)連接的定時(shí),需要遞歸調(diào)用setTimeout

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊
我試了一下。這個(gè)應(yīng)該是for循環(huán)的原因,循環(huán)了就輸出了。而setTimeout根本沒起作用。

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊
使用setTimeout本身是沒有任何問題,通過時(shí)間間隔,同樣可以實(shí)現(xiàn)。但,第一個(gè)參數(shù)需要注意,需要使用function代替,而不是直接把代碼寫在里面。setTimeout(function(){console.log(i)},10000*i);,大概瀏覽器需要解析吧。第二種方式,使用字符串代替函數(shù)體,setTimeout("console.log(1)",10000*i);。可以實(shí)現(xiàn)同樣的效果。

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個(gè)贊
典型的閉包問題,你測(cè)試下i看看,i是同一數(shù)字。然后如果是閉包問題,就是google閉包吧

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超6個(gè)贊
不好意思,我在chrome和FF下測(cè)試,輸出結(jié)果都是1~9,完全不符預(yù)期。代碼是這樣子的(簡(jiǎn)化版)
<!doctype html> <html> <head> <script> window.onload = function() { var i=0; var max=9; function incrementNum(){ i++; console.log(i); if(i<max){ setTimeout(incrementNum,1000*i); }else{ clearTimeout(incrementNum); } } incrementNum(); } </script> <head> <body> </body> <html>
能具體說下你那邊的實(shí)際情況嗎?^_^

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊
@Iwillknow:?
我是直接在firebug上面輸出的,有你要求的時(shí)間間隔輸出效果哈
第一次的時(shí)候,輸出1,接著立馬就是一個(gè)undefined。

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
@Canrz: 不好意思,沒有找到原因。根據(jù)檢測(cè)只是知道,這個(gè)undefined是firebug拋出的一個(gè)警告,并不是其它原因(如setTimeout)造成的,因?yàn)榧词惯\(yùn)行如下代碼也是會(huì)有undefined輸出,再過分一點(diǎn)只有“var a = 0;”的字樣也是會(huì)有undefined的輸出。~應(yīng)該是firebug的原因,學(xué)術(shù)淺薄具體不詳>_<,抱歉。
function test() { console.log("1"); } test();

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊
@Iwillknow:額 ,如果去掉test(),單獨(dú)跑
function test() { console.log("1"); }
就會(huì)輸出一個(gè)undefined。
你前面說的“在chrome和FF下測(cè)試,輸出結(jié)果都是1~9,完全不符預(yù)期”是什么情況,我firebug和瀏覽器單開都是隔段時(shí)間輸出一個(gè)數(shù)字

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
@Canrz: 不好意思,是完全符合預(yù)期,是能間隔一段時(shí)間輸出一個(gè)數(shù)字的。~是undefined的輸出不符合
添加回答
舉報(bào)