var data1=0;
function count1(){
console.log("count1:",data1++);
}
setInterval(count1,1000);
此时可以观察控制台,发现打印第一次会有延迟。如:
查看setInterval官方文档不难发现:
var intervalID = window.setInterval(func, delay[, param1, param2, ...]);
var intervalID = window.setInterval(code, delay);
Parameters
func A function to be executed every delay milliseconds.
code An optional syntax allows you to include a string instead of a function, which is compiled and executed every delay milliseconds. This syntax is not recommended for the same reasons that make using eval() a security risk.
…
因此,应该先执行以下原函数,再返回该函数给setInterval周期执行。此时可以如下实现:
var data2=0;
var count2= function(){
console.log("count2:",data2++);
return count2;//若不返回时,此函数只会执行一次
}
setInterval(count2(),1000);
这里也可以采用arguments.callee等方式指代当前函数。如:
不过也可以这样写:
var data3=0;
(function count3(){
console.log("count3:",data3++);
setTimeout(count3,1000);
})();
var div = document.querySelector('div');
var num = 10;
setInterval(function(){
if(num==1){
div.innerHTML = null;
return fn1;
}else{
num--;
div.innerHTML = '还剩'+num+'秒';
}
},1000);
效果如图:
它的会先执行那一秒钟,等一秒钟过了然后再执行里面显示的内容
解决办法:
直接调用
var div = document.querySelector('div');
var num = 11;
function fn1(){
if(num==1){
div.innerHTML = null;
return fn1;
}else{
num--;
div.innerHTML = '还剩'+num+'秒';
}
}
setInterval(fn1,1000);
fn1();
需要延迟执行的function中需要添加返回函数: 原js: var t = setInterval(scrollTop(),2500); function scrollTop(){ // ... } 更改: var t = setInterval(scrollTop(),2500); function scrollTop(){ // ......