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';}