有人能解释一下Twitter Bootstrap插件中使用的这个javascript模式吗?

Pet*_*ter 5 javascript jquery twitter-bootstrap

我正在查看Twitter Bootstrap的jQuery插件,看到它们都是使用这样的模式定义的:

!function($) {
  // code here

  // plugin definition here

} ( window.jQuery || window.ender);
Run Code Online (Sandbox Code Playgroud)

这看起来像是立即执行的匿名函数(匿名闭包)的变体:

(function($) {
  // code here

}(jQuery));
Run Code Online (Sandbox Code Playgroud)

有人可以解释Bootstrap变体的作用和原因吗?这是编写匿名闭包的更好方法吗?

谢谢!

小智 11

//  |---1. makes the function as part of an expression 
//  |                             so it can be immediately invoked
//  v
    !function($) {
//            ^
//            |___4. references what was passed, window.jQuery or window.ender

      // code here

      // plugin definition here

    } ( window.jQuery || window.ender); // <---2. immediately invoke the function 
//         ^                ^
//         |________________|_______3. pass window.jQuery if it exists, 
//                                                      otherwise window.ender
Run Code Online (Sandbox Code Playgroud)