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

what is the meaning of “!function($){}(window.jQuery)”?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What does the exclamation mark do before the function?
What does !function ($) { $(function(){ }) }(window.jQuery) do?

"是什么意思!函数($)(window.jquery)"?

1
2
3
4
<script type="text/javascript">
    !function($){
        //some codes here
    }(window.jQuery)

此JS原始代码URL:http://twitter.github.com/bootstrap/assets/js/bootstrap-dropdown.js


行首的!将您的函数转换为一个函数表达式,它与更流行的IIFE形式具有基本相同的效果1:

1
2
3
(function($){}(window.jQuery));
//which in turn is the same as
(function($){})(window.jQuery);

然后,通过将window.jQuery作为$参数传递,立即调用它。这有助于在函数内部使用$引用jquery,而不依赖于在noConflict模式下使用jquery的页面。

这种方法在开发插件供第三方使用时非常常见(并且推荐)。

更详细的解释是:函数声明不能是表达式的一部分,因此当您将函数关键字放在()中或放在它前面使用一元运算符时,它会被解释为函数表达式。

1.(function(){}())!function(){}()之间有细微的区别:虽然括号只是以函数表达式的形式对函数对象进行简单的计算,但是一元!将做同样的事情并翻转函数表达式的返回值。由于您没有将这个值赋给任何东西,所以它将被丢弃。

它的加载时间为1字节,而执行时间为!操作的成本。这两个过程所需时间不应超过一分之一毫秒/微秒。这主要是一个编码风格偏好的问题。