setTimeout延时0毫秒的作用
今天看了JD的代码,发现一个非常有意思的地方,他用到了setTimeout,但是设置的时间是0ms,douma瞬间傻X了,这是要干嘛?
然后我就百度一下啊。然后理解了这样写的主要用途,其他还有不知道的,欢迎各位大神补充,我只是抛砖引玉。
setTimeout延时0毫秒的作用:
这样写的话,setTimeout内部代码会变成异步的。
比如,在画面load的时候,你这样alert
> alert(1);
> setTimeout(function(){alert(2); }, 0);
> alert(3);
> setTimeout(function(){alert(4); }, 0);
> setTimeout(function(){alert(5); }, 0);
> setTimeout(function(){alert(6); }, 0);
> alert(7);
首先不卖关子,这样的输出结果是
先是1,3,7 这是一定的 然后2,4,5,6这个是不规律乱序的
因为2456的代码被异步执行了。
还有个例子
这个例子也是异步的,让你在keypress的情况下也可以取得输入的值(原本需要再keyup中才能取得)。
document.getElementById("id1").onkeypress = function(){
document.getElementById('show1').innerHTML = this.value;
}
document.getElementById("id1").onkeypress = function(){
setTimeout(function(){
document.getElementById('show1').innerHTML = this.value;
},0 );
}