什麼有人可以幫助我,我想知道的區別:差異的setTimeout()與的setTimeout()中的setTimeout()
setTimeout ("move()", 3000);
有:給我的朋友
setTimeout (function() {setTimeout ("move", 3000)}, 100);
感謝誰石化的答案。
什麼有人可以幫助我,我想知道的區別:差異的setTimeout()與的setTimeout()中的setTimeout()
setTimeout ("move()", 3000);
有:給我的朋友
setTimeout (function() {setTimeout ("move", 3000)}, 100);
感謝誰石化的答案。
首先,最重要的區別是所執行的實際有用的代碼:
setTimeout ("move()", 3000); // executes move(); - a function call
setTimeout ("move", 3000); // executes move; - a statement that doesn't do anything
第二個區別是在執行有用的代碼:
setTimeout ("move()", 3000); // move() gets called at T+3000
setTimeout (function() {setTimeout ("move()", 3000)}, 100); // move() gets called at T+3100
最後不同之處在於有用的代碼執行時,但它更加微妙。 JavaScript是單線程的,帶有事件循環。超時可以被視爲事件本身,因爲它們與常規DOM事件一樣參與相同的事件循環。
第一個代碼是直截了當的。當該行被執行時,移動調用被安排執行至少在該時間之後3000ms。 「至少」很重要,因爲如果JS引擎忙於執行其他代碼,事件處理程序可能會被延遲很長時間。
setTimeout (function() {setTimeout (move, 3000)}, 100);
第二個代碼是大致相同的,相同的調度如之前時間排定執行* 至少* 100ms的所遇到行之後。其中,執行可延遲
一個例子是這樣的一個:
setTimeout (function() {setTimeout (move, 3000)}, 100);
var d = new Date();
while ((new Date()).getTime() - 10000 < d.getTime()) ; // busy wait for 10 seconds
如前所述,一些代碼(什麼並不重要),預計至少100毫秒後執行。然而,在接下來的10秒內,瀏覽器正忙着執行這段時間。 10秒後,瀏覽器準備好處理其他事件,如預定的代碼。總的來說,在第一次調用setTimeout之後,移動函數被調用(至少)13秒。
總而言之,這些差異是次要的,並且沒有任何東西可以證明在上述簡單場景中對另一個setTimeout調用中的setTimeout調用是合理的。如果程序邏輯要求它,那也沒什麼壞處。
有趣的問題,兩個差
首先讓我們定義:
1。javascript vm不同的編譯順序
對於JavaScript來說,嘗試將str編譯爲可運行代碼並在3000毫秒後運行它,而B嘗試立即將該函數編譯爲可運行代碼,但在3000毫秒後運行它。
嘗試下面的演示:
setTimeout ('alert("A")', 3000);
// "A" alerted after 3000 milliseconds
setTimeout (alert('B')||function(){alert('C')}, 3000);
// "B" alerted instantly, while C alerted after 3000 milliseconds
2.不同使用範圍
B可具有更大的使用範圍,對於B可以通過使用閉合攜帶功能作爲上下文任何變量,但甲只是具有窗口或文檔的上下文。
嘗試以下演示:
(function(){var va = 1; setTimeout ('alert(va)', 3000)}());
// run into error:Uncaught ReferenceError: va is not defined after 3000 milliseconds
(function(){var vb = 1; setTimeout(function(){alert(vb)}, 3000);}());
// 1 alerted after 3000 milliseconds
爲什麼你需要setTimeout函數調用setTimeout函數裏面? – Mosiur