当 HTML 正文末尾引用外部 JavaScript 文件时,如何调用 JavaScript 函数?

Myk*_*ych 3 html javascript

我知道,当您想在 HTML body 部分中调用 JavaScript 函数时,您可以通过放入 body 标记中来实现<script> someFunction(); </script>,这是一个示例,我有这样的 HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

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

<body>
    <script>
        showAlert();
    </script>
</body>

</html>
Run Code Online (Sandbox Code Playgroud)

javascript 文件如下:

function showAlert(){
    alert("This is an alert!");
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但如果我将 JavaScript 文件引用放在正文的末尾,如下所示:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
</head>

<body>
    <script>
        showAlert();
    </script>
    <script type="text/javascript"
        src="/Script.js"></script>
</body>

</html>
Run Code Online (Sandbox Code Playgroud)

该函数showAlert()不再被调用。您能回答以下2个问题吗:

  1. 为什么showAlert()在第二种情况下没有被调用?
  2. 当在正文末尾引用函数时,如何(如果可能)从 JavaScript 文件调用该函数?

我之所以问这个问题,是因为我知道在正文末尾而不是头部引用 JavaScript 文件是一个很好的做法,这样页面将在加载所有 JavaScript 代码之前首先呈现。

Sci*_*ter 5

1) 脚本是线性加载的。由于脚本尚未加载,因此该函数未定义。(这与脚本内的函数提升形成对比。)

2)只需等待页面加载即可。

window.onload = function(){
    showAlert();
}
Run Code Online (Sandbox Code Playgroud)

window.onload = showAlert由于原因#1,仅仅这样做是行不通的。在这里,您可以延迟评估,直到该函数存在为止。)