猿问

js闭包作用域

为什么会输出10 次10 push进去的不应该是 1 - 9吗 这个坑求大神解答

function save_i(){

    var a = [];

    for(var i = 0;i<10;i++){

        a[i] = function(){

            return i;

        }

    }

    return a;   

}


var c = save_i();

for(var i = 0;i<10;i++){

   console.log(c[i]());

    //10次 10

}


阿晨1998
浏览 521回答 1
1回答

烙印99

只需要在for循环执行时,创建一个闭包函数将i值保存起来,既可以依次输出function save_i(){&nbsp; &nbsp; var a = [];&nbsp; &nbsp; for(var i = 0;i<10;i++){&nbsp; &nbsp; &nbsp; &nbsp; a[i] = function(i){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return function() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return i;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; };&nbsp; &nbsp; &nbsp; &nbsp; }(i);&nbsp; &nbsp; }&nbsp; &nbsp; return a;}var c = save_i();for(var i = 0;i<10;i++){&nbsp; &nbsp;console.log(c[i]());&nbsp; &nbsp; //已经变为依次输出}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答