比如
function(m){
  alert(m);
}('test')这个匿名函数不会执行然而
(function(m){
  alert(m);
})('test')
这样一来就行了然后有人说()的作用是让匿名函数立即执行,,果如是乎??

解决方案 »

  1.   

    本来没多大疑问,然而这个例子的出现增加了疑惑function CreateArray1() {  
                 var array = new Array();  
                 for (var i = 0; i < 10; i++) {  
                     array[i] = (function (m) {   //把这里的括号加上或者去掉,依旧返回0,1,2,3,4,5,6,7,8,9,这样一来顿生疑惑。
                         return m;  
                     })(i);  
                 }  
                 return array;  
             }  
             var results1 = CreateArray1();  
             document.write("Method1 Results:<br/>");  
             for (var i = 0; i < results1.length; i++) {  
                 document.write(results1[i]+"<br/>");  
             }
      

  2.   

    ()就是给匿名函数传递参数并立即执行之,但第一种情况匿名函数如果在冒号之后
    var test={
      aa:function(m){
          alert(m);
        }('test')
    }
    test.aa
    也是可以的
      

  3.   

    简单陈述一下,看下面例子var els = document.getElementsByName("text");for (var i = 0, j = els.length; i < j; i++){
      els.onclick = function(){
      alert(i);
      }
    }这样做,每次alert出来的都只是i最后的值,这是因为js并没有java那种"块状作用域"
    块状作用域简单举例就是,如
    java:
    for(int i = 0; i < 10; i++){
       
    }
    System.out.plant(i);//在这里面是访问不到i的而在js里面
    for(var i = 0; i < 10; i++){
      //scope
    }
    alert(i);//这里访问到得是i最后的值,这是因为这个例子与以下例子是等价的var i = 0
    for(; i < 10; i++){
       
    }
    alert(i);在for循环声明i与在外面声明都是一样的,因此当我们触发onclick事件的时候,获取到得值是循环完毕后的i 
      

  4.   


     for (var j = 0; j < 10; j++) {  
                     array[j] = function () {  
                         return j;  
                     };  
                }  
    如果换成这个没有参数的匿名函数,就一直返回10了,不行,难道说匿名函数加了参数就可以不需要()了吗??
      

  5.   

    不对,一直返回10是因为那个函数没有执行,array[j]等于的只是一个函数的引用,
    array[j]=function () { return j; }
    没执行但是如若array[j]=function (m) { return m; }(j)  这样就执行了,所以对这2个写法表示费解。。难道说传了参数匿名函数就执行了,但是联想到我第一楼说的
    比如
    function(m){
      alert(m);
    }('test')这个匿名函数不会执行
    所以费解
    因为
    array[j]=function (m) { return m; }(j)  和
    array[j]=(function (m) { return m; })(j)  怎么等效的??呼呼,累死了,,有人明白没??
      

  6.   

    void function(m){
      alert(m);
    }('test')
    加个void上去
      

  7.   


    javascript语言精粹不建议使用void
      

  8.   


    function (n) {
      alert(n);
      } (3)
    这个不执行是因为浏览器引擎并不支持这种格式,它不知道
    function (n) {
      alert(n);
    }
    是一个函数,所以才用()括起来,告诉浏览器,这是一个函数,并且我要执行它但其实不一定用()括起来才可以,我们只要用任意运算符,"~","+","-"等等,告诉浏览器这是一个函数,都可以实现,如
    ~function (n) {
      alert(n);
      } (3)
    +function (n) {
      alert(n);
      } (3)
    -function (n) {
      alert(n);
      } (3)在这里 var xxx = function(){}()"=" 右边写函数,是告诉引擎右边的匿名函数是一个能执行的函数。。所以直接()能执行,
    并不需要用()包括整个匿名函数了