2013-04-17 79 views
0

以下代碼來自顯示分頁表的簡單頁面。Javascript ajax回調和變量初始化

var exviewmodel = function() { 
    var self = this; 
    self.getList = function(pagenum) { 
     $.getJSON("/api/v1/getList", { page: pagenum }, function(data) { 
      self.paginator.count(data.count); 
     }); 
    }; 
    self.paginator = new Paginator(self.getList); 
}; 

我檢查並驗證了代碼的工作原理以及計數在ajax成功的paginator中正確更新。

我覺得這很奇怪,因爲paginator對象只有在定義了ajax回調後才被初始化。

JS解釋器在看到像getList這樣的函數定義時會做什麼,它指向尚未在異步回調中初始化的屬性?

回答

1

當JS解釋器看到像getList這樣的函數定義時,它究竟做了什麼,它引用了還沒有在異步回調中初始化的屬性?

它就是這樣。 「這是一個功能,OK」。

只有在函數被調用時纔會嘗試訪問變量。

+0

好的。所以執行過程就像1. JS解釋器創建一個對象來保存函數定義,而不必在函數中執行代碼。 2. self.paginator被初始化3.在成功回調中,它檢索現在初始化的paginator對象並更新它。我是否正確? – Ramnath