我注意到在某些地方,jQuery代码包含在一个自动调用函数中,如下所示。为什么这样做,在什么情况下这是有用的,在什么情况下是不必要的样板?
function( $ ) {
...
}( jQuery );
答案 0 :(得分:8)
简短回答:防止变量名称冲突。并不总是需要,而是为了创建无冲突的可重用代码的良好实践。
答案很长:在javascript中,$符号只是另一个变量。 jQuery使用它是因为它是一个很好的简写,而不是每次都要输出jQuery,但任何其他代码(包括其他库)都可以。
为了防止与同一范围内的变量的其他使用冲突(在本例中为“全局”范围内的$),通常将代码包装在具有“无冲突”变量的自调用函数中作为函数参数传递。然后,这会创建一个新的范围,您的变量不会干扰该变量的其他用途。这样你就可以传递完整的命名变量&在匿名函数中以任何名称使用它。
因此,在创建无冲突的可重用代码时,最好使用此方法:
(function( $ ) {
...
})( jQuery );
沿着这些方向,您还会看到以下格式:
(function( $, window, undefined ) {
...
})( jQuery, window );
在这种情况下,undefined
仅用于表示不再向该函数传递参数的可读性。
答案 1 :(得分:3)
如果您想避免使用$
function( $ ) {
...
}( jQuery );
在此功能中,您可以使用$
,而不必担心它在其外部使用,因为$
内部始终引用jQuery
对象。
这在创建jQuery插件时很有用,你会看到jQuery插件使用这种函数来避免与其他插件冲突。
答案 2 :(得分:0)
在函数范围$
中是局部变量,不与任何其他全局$
冲突。