2012-01-11 30 views
0

在與我來到鐵軌(3.0.x中,仍與原型)的rails.js,我看到了以下結構:如何設置JS事件在正確的時間

(function() { 
// ... 
document.on("click", ... 
})(); 

究竟與實現整個代碼在匿名函數中的包裝?這是一種有效的方式來延遲代碼,直到加載dom或只有文檔對象?

在我的項目中,我目前在Event.observe(document, 'dom:loaded', function() { ... }塊內有很多設置代碼。我想知道,如果我在重構我的代碼時應該採用上面的模式。

回答

2

你已經絆倒了module pattern。這很有用,因爲立即調用的函數內部的變量是本地的,並且不會污染全局名稱空間。

(function(){ 
    var something = 17; 
    //can use something inside here 
}()); 

//but not here anymore 

不ethat存在,因爲該功能立即調用(在最後()位)在timeing沒有區別

+0

我明白了,謝謝。所以我猜想在dom:ready之前使用文檔對象沒有問題。 – Jan 2012-01-11 17:25:01

+0

儘可能準確地處理文檔,但仍然存在與以前相同的問題。只能在創建元素後才能操作 – hugomg 2012-01-11 17:33:59

1

自調用匿名函數會引發裏面是什麼立刻,這無關延遲代碼。

爲了讓代碼塊在DOM準備就緒後執行,您必須具有DOMready偵聽器。我猜你提到的代碼是Event.observe(document, 'dom:loaded', function() { ... }

+0

另一個好的做法是將要在靜態HTML內容之後運行的代碼放到主體的末尾。 – 2012-01-11 17:43:01