无法在for循环中绑定setInterval

时间:2016-07-05 10:21:40

标签: javascript

我正在尝试在for循环中执行setInterval,但不是在interval中执行,而是立即执行。

在此示例中,我尝试使用.bind()

var bck =['red','yellow'];
for(var i = 0;i<bck.length;i++){
   var num = i;
   console.log(num)
     setInterval(function() {
        $('.demoDiv').css('background',bck[num]);
        }.bind(num), 5000);
}

我也试过创建一个闭包。

for(var i = 0;i<bck.length;i++){
   (function(i) {
     var _set=   setInterval(function(){
        $('.demoDiv').css('background',bck[i]);
        }, 5000)
    }(i));
}

这是JSFIDDLE

2 个答案:

答案 0 :(得分:1)

为什么要硬编码?你不需要使用循环,只需 setInterval 就可以了。

&#13;
&#13;
var bck = ['red', 'yellow'];
var i = 0;
setInterval(function() {
  $('.demoDiv').css('background', bck[i%2]);
  i++;
}, 5000)
&#13;
.demoDiv {
  background: rebeccapurple;
  width: 200px;
  height: 200px;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="demoDiv">

</div>
&#13;
&#13;
&#13;

编辑:由@Akshay Khandelwal强化,使用模数而不是if state。

答案 1 :(得分:0)

我选择使用数学运算来实现同样的目标,而不是重新设置i这显然是一个好主意。

var bck =['red','yellow'];
var i =0;
var _set=   setInterval(function(c) {
        $('.demoDiv').css('background',bck[i%2]); // Check the modulus value;
    i++;
}, 5000)