setInterval () 的一点问题,为什么里面的i一直没有增加!我想用setinterval 做一个倒计时 该怎么做?

i 打印一直是1?

var iniTime=4;
setInterval(function(){
 var    i=0;
    if(i>iniTime){
        console.log("ok")
    }
    else{
        i++;
        console.log(i);
    }
},1000);
阅读 4.5k
6 个回答
// el 显示倒计时的元素
// max 倒计时最大值
// callback,完成一次倒计时的回调
function timer(el, max, callback) {

    el.innerText = max + 's, 后重新发送';

    if(max === 0) {
        callback();
        return;
    }

    setTimeout(function() {
        timer(el, max - 1, callback);
    }, 1000);
}

醉了,你一开始就让i为0了,i++之后当然为1,因为你的i是局部变量,想有效也要把i跟iniTime在同一个地方声明。

把var i=0;写在计时器外面啊...你现在每次运行函数首先i就等于0

你的var i = 0;的位置有问题。
每次执行都重新赋值为0了。
var iniTime = 4,i = 0;
就OK

这么写,

var iniTime=4;
var i = 0;
setInterval(function(){
    if(i>iniTime){
        console.log("ok")
    }
    else{
        i++;
        console.log(i);
    }
},1000);

方法内部的变量在每次方法执行的时候都会被重新赋值!!!

随便写了一个:

function *time() {
    yield 4;
    yield 3;
    yield 2;
    yield 1;
    return("ok");
}
let timeSet = time();
let timer = setInterval(function(){
    console.log(timeSet.next().value);
},1000);
let timerClear = setTimeout(function(){
    clearInterval(timer);
},5500);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题