“!function($){}(window.jQuery)”是什么意思?

时间:2013-01-12 02:52:56

标签: jquery twitter-bootstrap

  

可能重复:
  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

1 个答案:

答案 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个字节,而执行时间为!个操作的成本。这两者都不应超过毫秒/微秒的一小部分。这主要是编码风格偏好的问题。