匿名函数
(function(){})();
最后的()表示立即执行参数
jQuery是作为这个方法的参数传进去的

解决方案 »

  1.   

    想想你平时定义函数时,怎么做的var fn = function(jq){
    jq('p').css('background', '#00f');
    }fn(jQuery);这样分开写,应该能明白了吧?
    只不过是把不使用fn这个变量保存了,可以减少一个变量的使用。
      

  2.   

    原理上面说了,不再赘述说没见过就不对了,jquery 就是这样包裹起来的
    (function(e, t) {

    })(window);当可能出现版本冲突时,这样写就很必要了
      

  3.   


    这个我理解了,只是,匿名函数外面也要套可括号就有点疑惑。
    (function(){})();
    而且这个括号不套就出错。
    难道两个括号连写是个功能?
    (1.匿名函数)(2.调用匿名函数,并传参);
      

  4.   

    这就跟function的写法有关了,这个具体怎么说呢var fn = function(jq){
    jq('p').css('background', '#00f');
    }(jQuery);
    上面这样写就是可以的var fn = function(){}
    function fn(){
    }
    这两种写法的区别记得吗?
    一个是属于赋值语句的,只有当代码执行到这个地方时,才会解析
    后面一种,会在页面加载的预解析阶段就进行解析了。(1.匿名函数)(2.调用匿名函数,并传参);
    这样的写法,它实质上,是一个表达式的可是如果你不前面不加那个括号的话,就会在预解析的时候,报错啊,因为function定义是以大括号结尾的啊。大概就是这个意思,可以理解吗?
      

  5.   

    如果预解析后,函数的定义是不是不存在了?
    比如:function(name)
    {
        alert(name)
    }('你好');预解析后,就变成了:('你好');所以,括号执行不到前面的匿名函数了,给匿名函数加上括号,是为了阻止 JS 预解析吗?太感谢你了。
      

  6.   

    解释多少都没用!相信是越解释,你越糊涂
    (alert)(1);
    看看这个就该清楚了
      

  7.   

    有些猜测,你可以自己直接测试的,用测试验证自己的想法。比如你觉得预解析会不会找不到匿名函数了,但是这个时候,你也得先确认,匿名函数,是否可以进行预解析。function(name){
        alert(name)
    }
    所以,就直接用一个空的文件,只包含上面的这一小段js,如果这个时候浏览器不会报错,就说明可以对匿名函数预解析。
    事实是,这个时候报错了,那也说明,预解析时,函数必须要有函数名的。所以,这里也就可以确认一个点,就是如果需要预解析的函数,它的结构必须是下面这样
    function fn(name){
        alert(name)
    }如果想要使用一个匿名函数,然后又让大家找不到的话,就可以直接给加个括号了
    (function (name){
        alert(name)
    })只是,这样写,是完全没有意义的,因为这段函数,我们也找不到,也不会执行,如果想要执行,那就是你最初写的那种样式了。
      

  8.   

    Mark一下下
    顺便问一下,这个和闭包有什么区别吗