除了一行外,我得到了所有的插件代码,由于搜索引擎的工作方式,我实际上无法搜索我的问题。
问题是这到底是什么:
(!function($) {/*....*/})(jQuery);
为什么这么说!功能($)??我猜测$.noConflict()
具有相同的效果,但这不是我们只使用(function($) {/*...*/})(jQuery);
它只是将美元符号包装到我们的功能块的原因。我完全清楚我可能会离开这里,我仍然是jQuery / js的中间人。
如果有人可以在函数声明之前请教我关于NOT运算符的效果,我将非常感激。
修改:我似乎忽略了没有 (!function($) ... )
的引导程序,只是 !function($)...
但是你们帮助我意识到它只是()
答案 0 :(得分:3)
所以这里有一些事情发生了。一切都被包含在一个立即执行的匿名函数中。这是为库创建一个范围,以便当作者声明函数和变量时,默认情况下它们不是全局的。
到目前为止我。好的下一件事是整个($){...}(jQuery)
的事情。这里发生的是作者将jQuery
库作为名为$
的参数传递给匿名包装函数。因此,在匿名函数的范围内,他可以使用$
来引用jQuery
,如您所料。这更像是一种最佳实践的东西,因为99%的jQuery在全局范围内已被定义为$
,但它被认为是在函数范围内引用全局变量的不良形式,因此他/她通过它作为一个参数。
还在吗?感叹号:Javascript中有一条规则,规定程序的第一行必须是一个表达式(即不是函数声明aka语句)。通过前置!作者将声明转换为表达式(返回false)。在这种情况下,我不认为!实际上是必需的,因为声明包含在()中并立即执行。 (函数调用是表达式)