网上有人说是防止重名冲突,啥啥了,还什么闭包啥的。我就不明白有什么用,不过我还是知道这匿名函数是什么意思,就是把window作为参数传进去执行了一遍。//这里是源码
(function (window, undefined) {
    // Define a local copy of jQuery
    var jQuery = function (selector, context) {
        // The jQuery object is actually just the init constructor 'enhanced'
        return new jQuery.fn.init(selector, context);
    }
    //...
})(window);
我试了下 如果在后面重新定义$的话还是会覆盖JQuery中的$符号的像这样直接写var jQuery = fun... 有什么关系,我怎么没发现它这么写有什么好处求指点!

解决方案 »

  1.   

    首先,直接写 var jQuery = function(){}
    你还要自己主动调用一次 jQuery();其次,我也不懂!
      

  2.   

    不用再主动调用了,这个函数本来就不用执行,是JQuery选择器的函数
    直接写跟外套个匿名函数效果完全一样的!
    我在想是不是里面用到undefined这个参数,但它undefined这个应该跟系统自带的undefined同一个意思。所以貌似也没必要阿。
      

  3.   

    (function(..){})(..)=function **(..){}
    **(..)
      

  4.   

    防止重名冲突不是指jQuery、$等本身防止冲突,而是把大量的变量名、函数名等封装在了JQ内部,不至于别人在外部不小心定义个ajax就把JQ的ajax覆盖了。至于你说的“重新定义$的话还是会覆盖JQuery中的$”,JQ有noConflict()函数啊,你可以将JQ更名,为你自定义的$让步
      

  5.   

    (function (window, undefined) {
      // Define a local copy of jQuery
      var jQuery = function (selector, context) {
      // The jQuery object is actually just the init constructor 'enhanced'
      return new jQuery.fn.init(selector, context);
      }
      //...
       
      window.jQuery = window.$ = jQuery;  //外面能够用$或jQuery函数,该句是关键
    })(window);立即执行的匿名函数起到 隔绝 变量作用域 的作用。如 :
    (function() {
       var test = function () {
           alert(1);
       }
    })();
    这是在外面调用test函数是错误的,也就是说是调用不到的。这样就避免匿名函数中的变量与 外面的变量冲突。如果我们需要开放test函数给外部使用,只需要注册成window的属性即可。如下:
    (function() {
       var test = function () {
           alert(1);
       }
       window.test = test;
    })();
      

  6.   

    lz说 后面重新定义$的话还是会覆盖JQuery中的$符号的 。
    覆盖的是window的$属性,而非jquery里面的变量。匿名函数中不开放的变量,外面是无法应用和修改的。至于函数定义的写法function test () {...}var test = function (){...}var test = function ooxx(){...}以上三种都是可以的。很多大牛都推荐第二种写法,该写法更能体现在js中函数也是一种变量。