setTimeout在js线程中执行位置
* js 是单线程的
* setTimeout被放到线程的最后
* 要小心里面用到的变量可能已经改变
* setTimeout第二个参数是指什么时候放入执行队列后面
HTML
<h1>setTimeout()在js线程中的执行位置</h1>
<p>setTimout方法不管第二个延时参数是多少,其代码都将在线程的最后执行,内部用到的变量如果值改变,相应的也就跟着改变。可以用这个方法判断页面准备完成?</p>
<script>
var n = 0;
alert('alert:div#text 现在还不存在,n = ' + n);
setTimeout('alert("setTimeout:div#text 已经存在,n = " + n)', 0);
n = 1;
</script>
<div id="text" style="color:#f00">Hello world!</div>
<script>
alert('alert:div#text 刚写到页面上');
n = 2;
</script>
<hr/>
<h2>页面加载完开始执行时间:</h2>
<script>
function logtime (id) {
document.getElementById(id).innerHTML = new Date().getTime();
}
setTimeout(function () { logtime('time3'); }, 0);
$(function () { logtime('time2'); });
</script>
<p>direct write : <strong id="time1"></strong></p>
<p>jquery ready: <strong id="time2"></strong></p>
<p>setTimeout(): <strong id="time3"></strong></p>
<script>
logtime('time1');
</script>
CSS
h1{font-size:150%;}
p, div{margin:8px 0;line-height:20px;font-family:'Microsoft YaHei';}