2010-01-07 171 views
0

SO問題(load-and-execution-sequence-of-a-web-page)給出了html頁面執行順序的細節。它聲明 - 腳本標籤是用單線程順序執行的。Javascript執行順序

我已經在我的網頁下面的代碼:

if(booleanTest)eval('parent.'+callback+'();'); 
    parent.hideWin(); 
    return false; 

假設回調方法具有簡單,而循環,跑了很多次(例如:30K次),我注意到, hideWin甚至在回調甚至完成之前得到執行(在IE7上測試)

問題是 - 如果執行是連續的,那麼爲什麼上述行爲到位 - 是否是瀏覽器特有的?

+0

你怎麼確定回調執行完成?也許瀏覽器正試圖優化大量的UI操作,並延遲重新渲染回調的某些效果,並且hideWin調用會被迭代一次? – Yuliy

+2

注意你很少需要'eval'。在這種情況下,您可以使用以下事實:可以使用字符串鍵訪問對象屬性:'if(booleanTest){parent [callback](); }'。如果'callback'實際上並不是一個命名在parent上定義的方法的字符串,那麼parent.hideWin()執行得如此之快的原因是'eval'-ed腳本失敗了。 – outis

+1

+1爲了擺脫1995年常見的財產訪問問題,我很驚訝現在人們還在寫這篇文章 –

回答

0

是的,第二行只會在if + eval後執行。我會在hidewin之前做一個警報來檢查booleanTest和其他狀態是否是預期的值