可能重复:
What does the exclamation mark do before the function?
What does !function ($) { $(function(){ }) }(window.jQuery) do?
“!function($){}(window.jQuery)”是什么意思?
<script type="text/javascript">
!function($){
//some codes here
}(window.jQuery)
</script>
此js原始代码网址:http://twitter.github.com/bootstrap/assets/js/bootstrap-dropdown.js
答案 0 :(得分:6)
该行开头的!
将您的函数转换为函数表达式,它与更受欢迎的IIFE形式具有基本相同的效果¹:
(function($){}(window.jQuery));
//which in turn is the same as
(function($){})(window.jQuery);
然后通过传递window.jQuery
作为$
参数立即调用它。这对于能够在noConflict
模式下独立于具有jQuery的页面使用$
在函数内部引用jQuery非常有用。
在开发第三方使用的插件时,这种方法很常见(和recommended)。
更多解释:函数声明不能是表达式的一部分,因此当您将函数关键字放在()
中或在其前面加上一元运算符时,它被解释为function expression
¹(function(){}())
和!function(){}()
之间存在细微差别:虽然括号只是以函数表达式的形式将函数计算为函数对象,但是一元!
会做同样的事情并翻转函数表达式的返回值。由于您没有将此值分配给任何内容,因此只会将其丢弃。
加载时间为1个字节,而执行时间为!
个操作的成本。这两者都不应超过毫秒/微秒的一小部分。这主要是编码风格偏好的问题。