代码有错: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()作为第一个参数。这样当然得不到你想要的结果了。
哦~~~不过setTimeout好像本身是异步的吧? 有什么方法可以证明Script DOM Element的方式加载的js是异步执行的呢?
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()作为第一个参数。这样当然得不到你想要的结果了。
有什么方法可以证明Script DOM Element的方式加载的js是异步执行的呢?
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')