自我调用函数jQuery

Sum*_*ai8 3 javascript jquery self-invoking-function

我注意到在某些地方,jQuery代码包含在一个自动调用函数中,如下所示.为什么这样做,在什么情况下这是有用的,在什么情况下是不必要的样板?

function( $ ) {
  ...
}( jQuery );
Run Code Online (Sandbox Code Playgroud)

Pre*_*tic 9

简短的回答:防止变量名称冲突.并不总是需要,而是为了创建无冲突的可重用代码的良好实践.

答案很长:在javascript中,$符号只是另一个变量.jQuery使用它,因为它是一个很好的速记,而不是每次都要输出jQuery,但任何其他代码(包括其他库)也是如此.

为了防止与同一范围内的变量的其他使用冲突(在本例中为"全局"范围内的$),通常将代码包装在自调用函数中,并将"无冲突"变量作为传递功能参数.然后,这会创建一个新范围,您的变量不会干扰该变量的其他用途.这样你就可以传递完整的命名变量,并在匿名函数中使用你想要的任何名称.

因此,在创建无冲突的可重用代码时,最好使用此方法:

(function( $ ) {
  ...
})( jQuery );
Run Code Online (Sandbox Code Playgroud)

沿着这些方向,您还将看到以下格式:

(function( $, window, undefined ) {
  ...
})( jQuery, window );
Run Code Online (Sandbox Code Playgroud)

在这个实例undefined中,仅用于可读性,以指示不再向函数传递参数.