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?

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

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

this js orginal code url:http://twitter.github.com/bootstrap/assets/js/bootstrap-dropdown.js


The ! at the beginning of the line turns your function into a function expression, it has the basically same effect¹ as the more popular IIFE forms:

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

Then it is immediately invoked by passing window.jQuery as the $ argument. This is useful to be able to use $ referencing jQuery inside the function independently of the page having jQuery in noConflict mode or not.

This approach is very common (and recommended) when developing plugins for 3rd-party use.

Little more explained: Function declarations can't be part of an expression, hence when you put the function keyword inside a () or precede it with a unary operator, it is interpreted as a function expression.

¹ There is a subtle difference between (function(){}()) and !function(){}() : while the parentheses simply evaluate the function to a function object in the form of a function expression, the unary ! will do the same thing and flip the return value of the function expression. As you're not assigning this value to anything, it will simply be discarded.

It is 1 byte in load time vs the cost of a ! operation in execution time. Both of these shouldn't take more than a fraction of milli/microsecond. It is mostly a matter of coding style preference.

链接地址: http://www.djcxy.com/p/17428.html

上一篇: 什么是“!functionname()”?

下一篇: “!function($){}(window.jQuery)”的含义是什么?