2010-06-19 81 views
0

我只是讀了一下成JavaScript走了過來一些代碼,處理加載圖像的過程:同步:onerror的事件和n ++

var n = 0; 
... 
for (...) { 
    ... 
    image[i].onload = function { n++; }; 
} 

這是一段代碼的安全,也可以有任何類型訪問變量時的種族n

回答

3

每個圖像的ONLOAD事件發生的時間(相對於彼此,如果一直髮生)通常是非確定性的。考慮瀏覽器緩存或併發下載等問題,或嘗試失敗。

但是,一次只有一個JavaScript「執行上下文」也就是說,n的最終值將反映ONLOAD處理程序調用(在給定時間)的總次數。也就是說,對於給定的頁面,所有的JS都是原子的,直到它完成爲止(屈服於瀏覽器直到發生事件)

「Web Workers」也適用於此事件模型;線程和變量訪問之間沒有傳統的「競爭條件」。但是,任務之間的任何共享(可變)狀態都可能導致競爭條件,儘管處於較高級別。

0

這是非常安全的,因爲大多數JavaScript運行在單線程上下文中。唯一的警告是Web Workers,但它們設計得非常好,只能通過JSON消息進行通信。