浅析jQuery(function(){})与(function(){})(jQuery)之间的区别


在JavaScript中,特别是使用jQuery库时,`jQuery(function(){})` 和 `(function(){})(jQuery)` 这两种模式经常遇到,它们各自有着特定的用途和区别。

### `jQuery(function(){})`

这种写法实际上是`$(document).ready(function(){})`的简写形式。它的作用是等待DOM完全加载和解析完成后,再执行其中的函数。这意味着你可以安全地在这个函数内部编写操作DOM的代码,而不用担心DOM元素还未加载完成的问题。


jQuery(function(){
    // 当DOM完全加载后,这里的代码才会执行
    // 你可以安全地操作DOM元素
});

### `(function(){})(jQuery)`

这种写法是一个立即执行的函数表达式(IIFE, Immediately Invoked Function Expression),它定义了一个匿名函数并立即执行它。这里的`(jQuery)`是将`jQuery`作为参数传递给这个匿名函数。这种方式通常用于创建一个闭包,以保护内部变量不被外部访问,并且可以在函数内部安全地使用传入的`jQuery`对象(这里传入的`jQuery`通常是一个别名,比如`$`,以避免在jQuery的`noConflict`模式下冲突)。


(function($) {
    // 在这里,$是jQuery的别名,你可以安全地使用它
    // 即使外部有其他库也定义了$
})(jQuery);

### 区别总结

- **用途不同**:`jQuery(function(){})` 用于确保DOM完全加载后执行代码,而 `(function(){})(jQuery)` 主要用于创建一个闭包,保护内部变量,并提供一个安全的`jQuery`别名(如果有必要)。

- **执行时机**:`jQuery(function(){})` 等待DOM加载后执行,`(function(){})(jQuery)` 定义后立即执行。

- **参数传递**:`jQuery(function(){})` 不直接接收参数(尽管函数体内可以访问全局的jQuery对象),而 `(function(){})(jQuery)` 接收一个参数(在这个例子中是jQuery对象本身)。

这两种写法在jQuery编程中非常常见,理解它们的区别对于编写高效、健壮的JavaScript代码非常重要。