2012-09-11 68 views
5

我正在閱讀一本關於JavaScript的書,它解釋瞭如何在JavaScript應用程序中使用MVC模式。在這段代碼中,它展示瞭如何設置一個控制器。任何人都可以解釋爲什麼jQuery美元符號作爲參數傳遞給line3中的函數,然後爲什麼在最後一行中沒有美元符號(jQuery)?

var Controller = {}; 
// Use a anonymous function to enscapulate scope 
(Controller.users = function($){ 
    var nameClick = function(){ 
     /* ... */ 
    }; 

    // Attach event listeners on page load 
    $(function(){ 
     $("#view .name").click(nameClick); 
    }); 
})(jQuery); 
+0

正確的縮進可以幫助您瞭解正在發生的事情。 –

+0

@KevinB如果最終(jQuery)實際上是調用函數,它不應該在它自己的行嗎? – Leahcim

+0

不,'(jQuery)'將'jQuery'作爲參數傳遞給存儲在'Controller.users'中的函數。你不會把它分成兩行嗎? 'alert(「Hello World!」)' –

回答

6

還有在最後一行的jQuery前面沒有美元符號,因爲變量的保存jQuery的名字是jQuery,不$jQuery。它立即通過$以避免命名衝突。

+1

so(jQuery);調用匿名函數?請解釋你是否可以。我有點缺乏經驗(雖然我讀了幾本書) – Leahcim

+1

@邁克爾:是! (儘管它並不是真正的匿名,它也被分配到Controller.users中。) – Ryan

1

傳遞給函數的jQuery爲函數中的$提供參數。換句話說,爲了保證函數能夠理解$是jQuery對象,傳遞的是jQuery完整對象名稱而不是$快捷方式。這有助於其他JavaScript庫正在使用並可能競爭$賦值的情況。

2

簡而言之,它確保在該上下文中沒有其他名稱爲$

jQuery變量名爲jQuery$是一個變量名中的有效符號,jQuery用它來存儲jQuery對象。上面的代碼很容易被重寫使用任何其他變量的名稱,而不是$

var Controller = {}; 
// Use a anonymous function to enscapulate scope 
(Controller.users = function(myJQueryVariable){ 
    var nameClick = function(){ 
     /* ... */ 
    }; 

    // Attach event listeners on page load 
    myJQueryVariable(function(){ 
     myJQueryVariable("#view .name").click(nameClick); 
    }); 
})(jQuery);