本帖最后由 littlecc2009 于 2010-12-29 16:56:54 编辑

解决方案 »

  1.   

    代码有错:setTimeout()的第一个参数,应该加上引号,或者直接传入一个function对象。
    var i = 0;
    var scri=document.createElement('script');
    scri.text = "setTimeout('alert(i)', 2000);";
    document.getElementsByTagName('head')[0].appendChild(scri);
    i = 3;你那样写的结果是,先计算“alert(i)”的值(返回的undefined,表示未定义),然后把undefined传给setTimeout()作为第一个参数。这样当然得不到你想要的结果了。
      

  2.   

    哦~~~不过setTimeout好像本身是异步的吧?
    有什么方法可以证明Script DOM Element的方式加载的js是异步执行的呢?
      

  3.   

    var scri=document.createElement('script');
    scri.text = "alert(1)";
    document.getElementsByTagName('head')[0].appendChild(scri);
    alert(2);如果是先弹出2,可以认为是“异步”的。
    经测试IE7和FF3.6.13都是先弹出的1,得出结论:“非异步”如果你只是简单的想延迟执行某段代码,只需照如下做,封装到一个函数即可,不需要创建新的<script>元素:
    window.setTimeout(function() {
    alert('world');
    }, 1000);
    alert('hello')