猿问

vue js for循环里添加了this.$get.get(),在里面的i变成了最后叠加的值

for(var i=0;i<4;i++){    console.log(i);    this.$http.get('json/room'+this.imgB[i].id+'.json').then(function(response){    
        console.log(i);
     ...
    }
}

第一个console.log的值是 0 1 2 3

第二个console的值是 4 4 4 4

为什么呢 ?


Helenr
浏览 2060回答 1
1回答

一只萌萌小番薯

闭包问题 循环四次引用的是同一个 i ,输出最后 i++ 的 4,解决办法可以写一个自执行函数,(i)作为函数的变量简单的例子,当 for 循环里包含 setTimeout 时,for&nbsp;(var&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;<=&nbsp;5;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;setTimeout((function&nbsp;time(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(&nbsp;i&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;}),&nbsp;0); }//&nbsp;6&nbsp;6&nbsp;6&nbsp;6&nbsp;6解决办法之一for&nbsp;(var&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;<=&nbsp;5;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;setTimeout((function&nbsp;time(i){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(&nbsp;i&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;})(i),&nbsp;0);} //&nbsp;1&nbsp;2&nbsp;3&nbsp;4&nbsp;5
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答