($){$(function(){})}(window.jQuery)是做什么的?
我使用twitter引导创build一个网站,并试图初始化工具提示。 除了添加如下内容:
$( “[相对=提示]”)。工具提示()
在application.js中,除非我保留,下面这段代码在bootstrap文档中使用,我的工具提示不会初始化。
 !函数($){
   $(函数(){  
   })
 }(window.jQuery)
上面的代码是做什么的?
让我们通过分解代码来解释
function () { }() 或者经常写成
 (function () { })() 
 是一个self-invoking anonymous函数,也称为立即调用函数expression式(IIFE) 。 它立即内联执行匿名函数。 
阅读更多关于解释封装的匿名函数语法 。
匿名函数是一个强大的function,并具有像范围(“variables名称间距”)的好处,请参阅JavaScript中的自执行函数的目的是什么? 。
现在他们正在使用
 function ($) { }(window.jQuery) 
 让我们跳过! 目前。 
 所以他们将window.jQuery作为parameter passing给该函数,并接受$ 。 
 这是做了window.jQuery (原始的jQuery对象)的一个别名,因此确保$将始终引用closure内的jQuery object ,无论其他库是否已经采取( $ )以外。 
 所以你使用$来编写代码你将永远有效。 
 另一个好处是, $作为匿名函数的一个参数,这使得它更接近于scope chain ,因此,如果我们使用全局variables,JS解释器在闭包内部find$对象所花费的时间会less于它$ 。 
 $(function(){ }) 
 正如你可能已经知道的那样,它是jQuery的文档就绪块,它确保当dom is ready ,这个函数中的代码将运行,因此所有的event binding's都能正常工作。 
阅读更多信息,请访问http://api.jquery.com/ready/
 那是什么!  在这里或者在这个函数之前,感叹号做了什么? 
简而言之:
 为了展示的好处!  ,让我们考虑一个案例, 
 (function() { alert('first'); }()) (function() { alert('second'); }()) 
 如果你把上面的代码粘贴到console ,你会得到两个警报,但是你会得到这个错误 
 TypeError: undefined is not a function 
 为什么会发生? 让我们来模拟JS引擎如何执行上面的代码块。 它执行这个匿名函数function() {alert('first');}()显示警报,并返回任何undefined的()内返回。 第二个function也是如此。 所以在执行这个块之后,最终会有类似的东西 
 (undefined)(undefined) 
 因为它的语法就像一个self-invoking anonymous函数,它试图调用这个函数,但是第一个(undefined)不是函数。 所以你得到undefined is not a function错误。 ! 修复这种或错误。 发生了什么事!  。 我引用上面的答案链接的行。 
当你使用!时,函数成为一元(逻辑)非运算符的单一操作数。
这迫使函数被评估为一个expression式,这允许它立即被内联调用。
 这解决了上面的问题,我们可以用上面的块来重写! 喜欢 
 !(function() { alert('first'); }()) !(function() { alert('second'); }()) 
对于你的情况,你可以简单地把你的工具提示代码放在文档就绪区块内
 $(function(){ $("[rel=tooltip]").tooltip(); }); 
它会正常工作。
 如果你只是使用$("[rel=tooltip]").tooltip()而没有任何doc ready block ,那么这段代码就有机会运行,DOM中没有任何带有rel=tooltip元素。 所以$("[rel=tooltip]")将返回一个空集, tooltip将无法正常工作。 
 如果没有doc ready block ,它将不起作用的一个例子标记, 
 . . . <script type="text/javascript"> $("[rel=tooltip]").tooltip(); </script> . . . . <a href="#" rel="tooltip">Something</a> <a href="#" rel="tooltip">Something</a> <a href="#" rel="tooltip">Something</a> 
 作为浏览器,按顺序解释标记,它将在面对它时立即执行js代码。 当它在这里执行JS块时,它还没有parsinga rel="tooltip"标签,因为它出现在JS块之后,所以它们不在DOM那一刻。 
 所以对于上面的情况$("[rel=tooltip]")是空的,因此工具提示将不起作用。 因此,将所有的JS代码放在document ready区块内总是安全的 
 $(function){ // put all your JS code here }); 
希望这一切对你有意义。