3

可能重复:
函数前的感叹号有什么作用?
!function ($) { $(function(){ }) }(window.jQuery) 做什么?

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

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

这个js原代码url:<a href="http://twitter.github.com/bootstrap/assets/js/bootstrap-dropdown.js" rel="nofollow noreferrer">http://twitter.github.com/引导/资产/js/bootstrap-dropdown.js

4

1 回答 1

6

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

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

然后通过window.jQuery作为$参数传递立即调用它。这对于能够$在函数内部使用引用 jQuery 非常有用,而与页面是否具有 jQuerynoConflict模式无关。

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

更多解释:函数声明不能​​是表达式的一部分,因此当您将 function 关键字放在 a 内()或在其前面加上一元运算符时,它会被解释为function expression

(function(){}())¹和之间有一个细微的区别!function(){}():虽然括号只是将函数计算为函数表达式形式的函数对象,但一元!将做同样的事情并翻转函数表达式的返回值。由于您没有将此值分配给任何东西,因此它只会被丢弃。

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

于 2013-01-12T02:56:39.330 回答