在setTimeout中调用document.write后“函数未定义”?

时间:2012-04-20 02:32:32

标签: javascript settimeout

以下是代码:

function getTime(j){
  var stopClock= new Date();
  delta[parseInt(j)]=stopClock.getMilliseconds()-start.getMilliseconds();
 }

 //REST OF THE CODE!!
function func(){
{
   for (var i = 0; i < 6; i++){
     start = new Date();
     document.write('<img src="'+URL[i]+'" width="1" height="1" alt="" onload="getTime('+i+');"/>');
    }
 }

 //SOME CODE

setTimeout(function() {
   func();
},100);

但是我收到了这个错误:getTime未定义

如果我这样声明getTime:

 document.getTime= function (j)

没有错误,但它永远不会执行该功能。

如果我卸下了setTimeout,它就可以正常工作了。

有什么想法吗?

谢谢,

3 个答案:

答案 0 :(得分:6)

您正在使用document.write电话破坏DOM。在某些浏览器中,这也会破坏全局变量。

而不是document.write,请尝试...

for (var i = 0; i < 6; i++){

    var img = document.body.appendChild(document.createElement('img'));
    img.src = URL[i];
    img.width = 1;
    img.height = 1;
    img.onload = makeHandler(i);

}

function makeHandler(i) {
    return function() {
        getTime(i);
    };
}

以下是清除全局变量的简单演示......

在Firefox中,第二个提醒将是undefined。在Chrome中,全局保留。

http://jsfiddle.net/Z9NbR/

window.foo = 'bar';

alert(window.foo); // now we have it

setTimeout(function() {
    document.write('new content');

    alert(window.foo); // now we don't
}, 100);

答案 1 :(得分:-2)

getTime()是Javascript中的预定义函数,请更改名称,它应该可以正常工作

答案 2 :(得分:-3)

也尝试使用如下的settimeout:

setTimeout('func',100);

这会在您的浏览器上做得更好吗?