风之石 function(){alert(1); }();//不加括号也可以?.<html>
<body>
<script>
c=function(){alert(1); }();//不加括号也可以?
 
</script>
</body>
</html>
.
c=(function(){alert(1); })(); 
枯井的理解:11楼
c=function(){alert(1); };//相当于定义一个函数c  通过调用c(); 来执行alert
-------------
c=function(){alert(1); }();//相当于定义函数C 并调用他
等同于
c=function(){alert(1); };
c();
非哥的理解:17楼恩, 名称为B 的函数 这句话是错误的
----------------------------------
从头说function(){}();是错误的,原因是 匿名函数不能这样执行.(function(){})();这是正确的。B=function(){}();与B=(function(){})();B 都是匿名函数执行后的返回值

解决方案 »

  1.   

     $("非哥")=》V风之石S《= $("枯井")
    要不要我去web版下个赌注,大家买谁赢?
      

  2.   

    看看最近流行的那些“框架”就知道,javascript可谓IT变态的顶级语言。
      

  3.   


    我同样关心你在WEB版押谁不会变成枯井吧
      

  4.   

    比较赞同... 目前ExtJS,我就觉得一个框架好用点,其他的... ... 不好说
    (还是说我有些落伍?不过什么都追最新的... ... 会累死,产出也不咋地)
      

  5.   

    如果是函数名称,这里的困惑在于c= function(){alert(1); } ()
    等号的优先级高于括号
      

  6.   

    首先我们看看这里发生了什么
    c=function(){alert(1); }();
    =>运行函数表达式返回x相当于:x=function(){alert(1); }
    =>按优先级会先运行x即:x()
    =>运行赋值运算,由于函数没有返回值所以:c=undefined下一个问题是没有c=的时候为什么
    function(){alert(1); }()
    这个错误
    (function(){alert(1); })()
    这个又可以运行呢
    因为js是一种会自动判断结尾的语言
    当一个function以这个形式出现
    function(){}
    而前面又没有运算符号时会看作是一个函数定义语句
    那么function(){alert(1); }()
    其实是
    function(){alert(1); };
    ();
    这里的();会造成语法错误所以直接会报错
    如果前面有运算符时那么这个函数会看成是一个函数表达式
    (function(){alert(1); })()
    相当于运行function获得返回值(函数的引用)在进行()运算
    跟第一个例子一样
      

  7.   


     c=function(){alert(1); }();   function(){alert(1); }优先级>()>=研究这位仁兄的代码,这位仁兄的解答很是透彻! function(){alert(1); }您用换原的思想解释的 生动活泼
      

  8.   

    如果将function(){alert(1); }()
    改为 function(){alert(1); return "asdsad";}();再分别执行
    c=(function(){alert(1); return "asdsad"})();
    alert(c);
    和  
    c=function(){alert(1); return "asdsad"};
    c();
    alert(c);
    所得到结果是不一样的    
      

  9.   

    (function(){alert(1); })() 
    相当于定义function获得函数的引用(表达式的返回值)再进行()运算这样比较对
      

  10.   

    function(){alert(1); }
    =>
    function(){alert(1); }() 
    =>
    c=function(){alert(1); }() function(){alert(1); }优先级高于()优先级高于=
      

  11.   

    我晕,又结贴了。
    谁能打开这个网址,帮我把内容贴一下,多谢~
    http://www.hedgerwow.com/360/dhtml/js-anonymous-function-patterns.html
      

  12.   


    不是 function(){alert(1); }优先级高于() 是 function(){alert(1); }()  优先级高于 = = 的优先级原因 让 
    function(){alert(1); }() 
    变成了 (function(){alert(1);}( )); 
      

  13.   

    function(){alert(1); }()   其实前面出现!~=  都可以一并解释了 !
      

  14.   

    关于匿名函数 (anonymous function)有以下几种写法The Bad Pattern : It won't work and you'll get a syntax error
    <script>
    function(){
    alert(1);
    }();
    </script>Pattern 1 : Function Literal
    Declare Function as an Object first then execute it.<script>
    (function(){
    alert(1);
    } ) ( );
    </script>
    Pattern 2 : Prior Expression
    Use parentheses to force a declared function to be executed since JavaScript evaluates expressions from the inner parentheses to outer parentheses<script>
    ( function(){
    alert(2);
    } ( ) );
    </script>Pattern 3 : Void Operator
    We can use "void" to evaluate a lone operand without using parentheses as the wrapper. of function<script>
    void function(){
    alert(3);
    }()
    </script>