function createFunctions(){
 var result = new Array();
 for(var i=0;i<10;i++){
result[i]=function(){
return i;
};
 }
 return result;
 }
 var funcs=createFunctions();
 for(var i=0;i<funcs.length;i++){ document.write(funcs[i]()+"<br/>");
 }
为什么每次输出的是10,我对闭包也不太,清楚,请老鸟们给点指教,谢谢了

解决方案 »

  1.   

    10个function里的i都是指向createFunctions作用域下的i,这个i最后为10,所以..
      

  2.   

    function createFunctions(){
     var result = new Array();
    for(var i=0;i<10;i++){
    result[i]=function(i){
    return function(){
    return i;
    }
    }(i)
    }
    return result;
     }
     var funcs=createFunctions();
     for(var i=0;i<funcs.length;i++){document.write(funcs[i]()+"<br/>");
     }
      

  3.   


    <script>
            function createFunctions() {
                var result = new Array();
                for (var i = 0; i < 10; i++) {
                    result[i] = cc(i);
                }
                return result;
            }        function cc(i) {
                            return i;
                    }        var funcs = createFunctions();        for (var i = 0; i < funcs.length; i++) {
                
                document.write(funcs[3] + "<br/>");
            }
        </script>
      

  4.   

    因为 result 数组里面保存的是方法,还未执行!直到最后输出时才执行的!
      

  5.   

    <script type="text/javascript">
                function createFunctions(){
                    var result = new Array();
                    for(var i=0;i<10;i++){
                        result[i]=function(j){
                            return j;
                        };
                    }
                    return result;
                }
                var funcs=createFunctions();
                for(var i=0;i<funcs.length;i++){
                    document.write(funcs[i](i)+"<br/>");
                }
            </script>
    给简单改动一下,就是闭包了。哈哈。其实你已经形成闭包了,但没使用。你需要给个参数进去。
      

  6.   


    function createFunctions(){
     var result = new Array();
    for(var i=0;i<10;i++){result[i]=function(i){
    return i;
    };
    }
    return result;
     }
     var funcs=createFunctions();
     for(var i=0;i<funcs.length;i++){document.write(funcs[i](i)+"<br/>");
     }
      

  7.   

    等我写出来楼上已经写好了纠结。我就解释下吧
    funcs这是一个函数数组,所以楼主没去给整个函数设置参数所以它就自动读取定义这个函数的地方的变量i
    而最后这个i是10所以一直输出的就是10(我是这么理解的)
      

  8.   

    明白了,for循环的时候result[i]指向的是函数,函数是引用,函数没有被执行,循环完了的时候,i是10.返回的时候,闭包里的i就是10