function(){}();
(function(){})();
这两个是自调用的匿名函数,也称为立即调用的函数表达式(IIFEs)。它立即内联执行匿名函数。
()是对函数赋值,所以function( $ ){}(window.jQuery) 就是指把window.jQuery 作为参数传给前面的匿名函数,也就是$.
这样做的好处是,在这个匿名函数代码块里保证了$ 与 window.jQuery 是相等的,并且不影响外部其他程序对 $ 的改变。因此,在闭包中使用 $ 编写的代码将始终有效。另一个好处是,$ 在匿名函数中作为参数出现,这使它在作用域链中更为接近,因此JS解释器在闭包中查找$ 对象所需的时间比使用global$时要少。
$(function(){
})
正如您可能已经知道的,这是jQuery的document ready块,它确保当dom准备好时,此函数中的代码将运行,因此所有事件绑定都将正常工作。
!的作用:
(function() {
alert('first');
}())
上述代码执行时会alert first。让我们模拟一下JS引擎如何执行上面的代码块。它执行这个匿名函数 funtion(){alert(‘first’);}(),显示警报,同时没有任何返回值。(undefined)又被执行,所以console会报错:undefined is not a function.
!可以解决上述错误:
!(function() {
alert('first');
}())
当你使用的时候!,函数将成为一元(逻辑)NOT运算符的单个操作数。
这将强制将函数作为表达式计算,从而允许立即内联调用它。
参考:
https://stackoverflow.com/questions/10896749/what-does-function-function-window-jquery-do