function f1(){    n=999;    function f2(){
      alert(n); 
    } return f2;  }var result =f1();
result();问个闭包的问题,为什么f1()必须赋值给变量后执行才有效?直接执行f1()产生不出任何效果或者给个参考技术文档连接也行,这方面概念模糊,谢谢

解决方案 »

  1.   

    直接执行f1(), 只是返回了你在f1中定义的函数f2,var result = f1();  // result 就是f2喽,这时result()才会执行f2
      

  2.   

    楼主还可以这样调用:(f1())();和这个一个效果:var result =f1();
    result();
      

  3.   

    <script type="text/javascript">
    function f1(){    n=999;    function f2(){
          alert(n); 
        }return f2;  }
    (f1())();
    //var result =f1();
    //result();
    </script>
    上面那样也可以,因为f1返回的是函数指针
      

  4.   

    你返回的就是一个函数并没有执行这个函数。
    var result =f1();
    result();
    改成f1()();
    或者f1里的return f2;改成f2();
      

  5.   

    function f1(){
        n=999;
        function f2(){
            alert(n);  
        }
        return f2;
    }
    f1()(); // 999
    这种写法很诡异哦,三个四个设置更多的括号都是可能滴,呵呵