【问题标题】:Need help understanding Twitter bootstraps plugins (jQuery)需要帮助了解 Twitter 引导插件 (jQuery)
【发布时间】:2012-02-06 09:08:42
【问题描述】:

我得到了除一行之外的所有插件代码,并且由于搜索引擎的工作方式,我实际上无法搜索我的问题。

问题是这到底是什么:

(!function($) {/*....*/})(jQuery);

为什么会说 !functions($)??我猜测$.noConflict() 的效果相同,但这不是我们只使用(function($) {/*...*/})(jQuery); 的原因,它只是将美元符号包装到我们的功能块中。我完全知道我可能会在这里偏离基础,我仍然是 jQuery/js 的中级。

如果有人能告诉我函数语句之前 NOT 运算符的作用,我将不胜感激。

编辑:看来我忽略了引导程序没有 (!function($) ... ) 而只是 !function($)... 但是你们帮助我意识到它只是 () 的替代品

【问题讨论】:

标签: jquery twitter twitter-bootstrap


【解决方案1】:

所以这里发生了一些事情。一切都被包装在一个立即执行的匿名函数中。这是为库创建一个范围,以便当作者声明函数和变量时,它们默认不是全局的。

到目前为止和我在一起。好的,接下来是整个($){...}(jQuery) 的事情。这里发生的事情是作者将jQuery 库作为名为@9​​87654323@ 的参数传递给匿名包装函数。所以在匿名函数的范围内,他可以使用$ 来引用jQuery,正如你所期望的那样。这更像是一个最佳实践,因为 99% 的时间 jQuery 已经在全局范围内定义为 $,但它被认为是在函数范围内引用全局变量的错误形式,因此他/她将其传入作为参数。

还在吗?感叹号:Javascript 中有一条规则规定程序的第一行必须是表达式(即不是函数声明,也就是语句)。通过在前面加上 !作者正在将声明转换为表达式(返回 false)。但是在这种情况下,我不认为!实际上是必需的,因为声明包含在 () 中并立即执行。 (函数调用是一个表达式)

【讨论】:

  • 确实,已经是表达式了; ! 是多余的。这是将声明包装在括号中的一种替代方法,但作者出于某种原因两者都做了。当您谈论程序的第一行时,我不知道您指的是什么;事实上,我确信绝大多数 Javascript 脚本都是从语句开始的。