大前端

bug_for循环中提取循环次数bug(用闭包解决 )

2017-03-20  本文已影响4人  oldSix_Zhu

<a href="https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures">学习网址推荐</a>

<script>
    for(var i = 0; i < 10; i++)
    {
        setTimeout(function () {
            console.log(i);
            //打印10次10
        },0);
    }
</script>

因为JavaScript函数的特点主任务代码先执行
即先把for循环的10次循环走完,再执行setTimeout,此时i为10了

解决代码:

<script>
    for(var i = 0; i < 10; i++)
    {
        function test1(j) {
            return function () {
                console.log(j);
            };
        }

        var test2 = test1(i);
        setTimeout(test2,0);
        //打印0到9
    }
</script>
上一篇下一篇

猜你喜欢

热点阅读