setTimeout() - 匿名函数语法在页面加载时触发两次

时间:2018-02-24 04:08:21

标签: javascript settimeout onload

以下是我的index.html文件和script.js文件的示例,其中包括:



main();

function main() {
  if (document.readyState == 'complete') {
    console.log('test');
  } else {
    setTimeout(function() {
      main();
    }, 1000);
    //setTimeout('main', 1000);
  }
}

<!DOCTYPE html>
<html>

<head>
  <script type="text/javascript" src="scripts.js"></script>
</head>

<body onload="javascript: main();">
</body>

</html>
&#13;
&#13;
&#13;

出于某种原因,setTimeout(function() { main(); }, 1000);两次调用main(),而setTimeout('main', 1000);调用一次。两个人不应该产生相同的结果吗?我错过了什么?

3 个答案:

答案 0 :(得分:2)

您的代码正在运行main()两次。进入js文件的第一行,然后再次访问onload标记的body属性。

我建议您从onload代码中删除body处理程序。

答案 1 :(得分:1)

实际上并没有按照你的想法行事。 setTimeout('main', 1000)无所事事,因为它是无效的代码。它应该是setTimeout(main, 1000)

它看起来两次运行的原因是因为您的onload="javascript: main();"标记中有body,并且还会在JavaScript顶部调用main();

答案 2 :(得分:1)

您的<body onload="javascript: main();">已调用函数一次,您的JavaScript函数开头也称为main函数。