在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代码非常重要。