jQuery $ 函数语法

5
以下函数定义有什么区别?
1:
$(function () {
    //stuff here
}); 

2:

function($){
    //stuff here
}
2个回答

9
在#1中,当DOM准备就绪时,jQuery将调用您的函数;将一个函数传递给$()$(document).ready(function() { ... });的快捷方式(详细信息)。
在#2中,您正在定义一个函数,但既没有调用它,也没有请求jQuery调用它。(实际上,如所示,这是语法错误——您需要将其分配给某个内容或调用它才能在没有名称的情况下有效。)您引用的任何内容都不会执行该函数,您必须自己调用它。
在#2中,您可能看到的习惯用法是:
(function($) {
    // ...code using `$` for jQuery here...
})(jQuery);

当您希望代码立即运行(而不是等待DOM准备就绪),并且要在函数内使用$来引用jQuery,但又希望兼容noConflict模式时,通常会执行此操作。您在插件中经常看到这种情况。它定义了一个接受$参数的函数,该参数覆盖全局定义的任何$,然后立即调用该函数,并将jQuery作为参数传递进去。因此,即使全局上没有将$映射到jQuery,在该函数内部也是如此。您可以通过以下方式执行相同的操作:

(function() {
    var $ = jQuery;
    // ...code using `$` for jQuery here...
})();

...但由于某种原因,前面的例子更常见,即使有点不太清晰。(我想可能是它少了几个字符。)


亲爱的@T.J. Crowder,感谢您的回答:但是#1和$(document.body).ready之间有什么区别呢? - SilverLight
@LostLord:就像我说的,这只是一个快捷方式,请查看链接获取详细信息。(但你指的是 $(document).ready(handler) 而不是 $(document.body).ready(handler)。) - T.J. Crowder
谢谢先生:对于获取元素ID,哪个更好:$(document).ready(handler)还是$(document.body).ready(handler)? - SilverLight
@LostLord:它们都不会给你元素的ID。如果你只是想确保DOM已准备好,只需使用$(handler)$(document).ready(handler)。文档中没有关于$(document.body).ready(handler)的说明,所以我不会使用它。 - T.J. Crowder

3
  1. 这段代码使用匿名函数作为第一个参数来调用函数$。通常在页面加载完成(或者更好地说是DOM准备就绪)时使用它来执行某些操作。它会在事件被触发时执行一些操作。

  2. 这段代码只是声明了一个带有一个参数$的匿名函数。您可以经常在jQuery插件的代码中找到此类函数。这种技术对于局部拥有$变量非常有用。这将稍微提高性能并帮助不污染全局作用域。

因此,第一个片段将执行某些操作,而第二个片段将没有任何有用的操作。


感谢关注。但我应该调用它们还是它们自行执行!它们的执行时间有什么区别? - SilverLight
@LostLord:正如我在答案中所说的,第一个函数将被jQuery调用(在DOM准备就绪时),而第二个函数在你的问题中并不会被调用,除非你主动调用它。 - T.J. Crowder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接