setTimeout() 是属于 window 的方法,该方法用于在指定的毫秒数后调用函数或计算表达式。语法格式可以是以下两种:setTimeout(要执行的代码, 等待的毫秒数),setTimeout(JavaScript 函数, 等待的毫秒数);
一个简单例子:
<input type="text" id="displayBox" name="displayBox" value="0">
<script>
x = 0
function countSecond()
{
if(x<20) {
x = x+1
document.getElementById("displayBox").value=x
setTimeout("countSecond()", 1000)
}
}
// 执行函数
countSecond()
</script>
//input中的value值每隔一秒就会+1,直到等于20停止。
另一个例子面试中常会出现:
for(var i=1;i<=3;i++){
setTimeout(function(){
console.log(i);
},10);
};
答案:4 4 4。是不是有些人会有疑问为什么不是1,2,3,因为setTimeout是一次执行函数,这里是10ms后执行,仅仅执行一次;for(var i=1;i<=3;i++),i的每次取值都是执行setTimeout这个函数,并没有执行setTimeout里面的function(即闭包函数),setTimeout里面的function是有setTimeout的定时触动的,也就是10ms后执行,也就是说i从1~3时,一共执行了3次的setTimeout()函数,此时的i的值是3,由于for语句的执行速度远小于1秒,所以,1秒后,由setTimeout()函数定时触动的闭包函数function()开始执行,console.log(i);i的值已经是4了,所以相继打印3次i。总结一句话:Javascript 事件处理器在线程空闲之前不会运行.
如何让上述代码输出 1 2 3?
for(var i=1;i<=3;i++){
setTimeout((function(a){ //改成立即执行函数
console.log(a);
})(i),0);
};
1,2,3/输出