jQuery:$作为参数

jQuery:$作为参数,jquery,Jquery,我正在读一本关于JavaScript的书,书中解释了如何在JavaScript应用程序中使用MVC模式。在这段代码中,它展示了如何设置控制器。有人能解释为什么jQuery美元符号作为参数传递给第3行中的函数,以及为什么最后一行(jQuery)前面没有美元符号 var Controller = {}; // Use a anonymous function to enscapulate scope (Controller.users = function($){ var nameClick

我正在读一本关于JavaScript的书,书中解释了如何在JavaScript应用程序中使用MVC模式。在这段代码中,它展示了如何设置控制器。有人能解释为什么jQuery美元符号作为参数传递给第3行中的函数,以及为什么最后一行(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);

最后一行的
jQuery
前面没有美元符号,因为保存jQuery的变量的名称是
jQuery
,而不是
$jQuery
。它立即作为
$
传递,以避免命名冲突。

传递给函数的jQuery正在函数中为$提供参数。换句话说,为了确保函数理解$jQuery对象,传递的是jQuery完整对象名,而不是$shortcut。这在其他javascript库正在使用并且可能竞争$assignment的情况下很有帮助。

简单地说,它确保在该上下文中没有其他名称被命名为
$

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);

适当的缩进可能有助于您理解发生了什么。@KevinB如果final(jQuery)实际上正在调用函数,它不应该在自己的行上吗?不,
(jQuery)
正在将
jQuery
作为参数传递给存储在
控制器中的函数。用户
。你不会把它分成两行吧<代码>警报(“Hello World!”)so is(jQuery);调用匿名函数?如果可以,请解释一下。我有点经验不足(尽管我读过几本关于这方面的书)@Michael:是的!(不过,它并不是真正匿名的;它被分配给
Controller.users