Need help understanding Twitter bootstraps plugins (jQuery)
除了一行,我得到了所有的插件代码,由于搜索引擎的工作方式,我实际上无法搜索我的问题。
问题是这到底是什么:
1
| (!function($) {/*....*/})(jQuery); |
为什么这么说!功能($)?? 我猜测$.noConflict()的效果相同,但这不是我们只使用(function($) {/*...*/})(jQuery);它只是将美元符号包装到我们的功能块的原因。 我完全知道我可以离开这里,我仍然是jQuery / js的中间人。
如果有人可以在函数语句之前请教我关于NOT运算符的效果,我将非常感激。
编辑:我似乎忽略了没有(!function($) ... )而只是!function($)...的bootstrap
但你们帮助我意识到它只是()的替代品
-
我以前从未见过这个。
-
@LightnessRacesinOrbit是的,请查看twitter.github.com/bootstrap/assets/js/bootstrap-tooltip.js
-
谷歌"感叹号功能定义javascript"的第一个结果是....
-
可能重复的是感叹号在功能之前做了什么?
-
因为无论如何都使用(),似乎毫无意义。
-
facepalm时刻......我甚至没想过要写出来......谢谢你先生!
-
stackoverflow.com/questions/7586870/… 太
所以这里有一些事情发生。一切都被包含在一个立即执行的匿名函数中。这是为库创建一个范围,以便当作者声明函数和变量时,默认情况下它们不是全局的。
和我一起到目前为止。好的接下来是整个($){...}(jQuery)的事情。这里发生的是作者将jQuery库作为名为$的参数传递给匿名包装函数。因此,在匿名函数的范围内,他可以使用$来引用jQuery,如您所料。这更像是一种最佳实践的东西,因为99%的时间jQuery已经在全局范围内定义为$,但它被认为是在函数范围内引用全局变量的不良形式,因此他/她将其传递给作为参数。
还在那儿?感叹号:Javascript中有一条规则,规定程序的第一行必须是一个表达式(即不是函数声明aka语句)。通过前置!作者将声明转换为表达式(返回false)。在这种情况下,我不认为!实际上是必需的,因为声明包含在()中并立即执行。 (函数调用是一个表达式)
-
确实,它已经是一种表达; !是多余的。 它是将声明包装在parens中的替代方法,但作者由于某种原因已经完成了这两个方面。 当你谈到一个节目的第一行时,我不知道你指的是什么; 事实上绝大多数Javascript脚本我都肯定从语句开始。