本帖最后由 Legend1988 于 2012-03-31 00:55:31 编辑

解决方案 »

  1.   


    function a()
    {
        var array = new Array();
        for (var i = 0; i < 10; i++)
        {
            array.push(function() {return i}); //这个i并不是内部函数的局部变量,怎么会是闭包呢,function(i) {return i;} 这个内部函数的局部变量i才是闭包
        }
        
        return array;
    }
      

  2.   

    function() {return i} 这样的语句并没有被执行,只是构建了一个函数体为return i;的函数对象,仅此而已。当i=10时,迭代停止,外部函数返回。当再去调用array[i]()时,i的值依旧为10。因此每一个元素的array都返回i=10。   跟我之前看到的一个例子一样,很相似……
      

  3.   

    都是闭包。
    函数执行创建作用域,函数声明绑定作用域。<script>
    function f(x) 
    {  
        var g = function () { return x; }  
        return g;  
    }
    </script>当f函数声明时,它绑定window域,也就是全局域,所有在f函数内找不到的变量,它都会去window域找。
    当f函数执行时,它生成一个作用域。
    当g函数声明时,他绑定f执行后生成的作用域,所有在g内找不到的变量,它会先去f函数找,还找不到就再去window域找。
      

  4.   

    所以你每次执行f,都会重新声明一次g,然后g里面的x因为本身未定义,就会到f域去找。