ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
>[info] 在 HTML 页面中使用 JavaScript 代码 和在 HTML中使用 CSS 样式一样,也有三种方法,即当页面书写、外部引用、和在当前行书写三种 这三种方法中,前两种都会用到 `<script>` 标签 ,第三种是在 HTML 标签中 使用 `Javascript:` 的方式书写 ## 一 、当前页面书写 使用 `<script> ... </script>` 标签,可以将 JavaScript 代码写在 HTML 文档的任意位置 如: ~~~ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>this is a test</title> <script type="text/javascript"> function sayHello(){ alert("Hello World"); } </script> </head> <body> </body> </html> ~~~ `<script>` 定义了下列 6 个属性 * src :可选。表示包含要执行代码的外部文件。 * async :可选,异步加载,表示立即下载该 JavaScript 脚本,但不影响其它代码的继续执行,此属性只有在加载外部代码(使用 src 属性)时才会有效。 * type :可选,默认为 `type="text/javascript"` ,和 language 属性一样,都可用来指定该` <script> `标签中的脚本的类型的。 * charset: 可选,用来指定当前脚本的字符集,此属性也是只有在使用 src 属性之后才会有效,但因为一般浏览器会直接忽略该属性,所以使用的较少。 * defer: 可选,表示等到当前脚本可以等到该页面代码完全加载显示之后再执行,此属性也只针对外部引入脚本有效,也就是使用了 src 属性之后有效。 * language:已废弃,原来用于表示编写代码使用的脚本语言,由于大部分浏览器都会忽略该属性,所以也就没什么用了 >[danger] 包含在 `<script>` 元素内部的 JavaScript 代码将被从上至下依次解释。就拿前面这个例子来说,解释器会解释一个函数的定义,然后将该定义保存在自己的环境当中。在解释器对 `<script>` 元素内部的所有代码求值完毕以前,页面中的其余内容都不会被浏览器加载或显示 ## 二、外部引入方式 使用外部引入的方式,需要用到 `<script>` 标签中的 `src` 属性,例如: ~~~ <script type="text/javascript" src="howie.js"></script> ~~~ 上面这段代码表示,在当前页面中引入一个外部名叫 howie.js 的 js 文件 >[danger] 如果在 `<script>` 标签中使用了 src 属性,则写在当前 `<script>`与`</script>` 标签之间的 JavaScript 代码将会被忽略,也就是不会被执行 ## 三、在当前 HTML 标签中书写 JavaScript 代码 通常前两种方式已经能够满足日常的大部分需求了,但有时也会有一些特殊的需求,需要在 HTML 标签中书写 JavaScript 代码,如: ~~~ <a href="Javascript:alert('我就是不给你跳');">这个 a 链接不会跳转</a> <button type="button" onclick="javascript:document.location.href='http://www.baidu.com'">普通按钮也可以跳转</button> ~~~ 以上这段代码第一个 `<a>`标签将不会跳转,第二个普通的 `<button>` 按钮将会跳转到另一个网站。 >[danger] 无论用何种方式书写 JavaScript 代码,只要不存在 `defer` 和` async` 属性,浏览器都会按照 `<script>` 元素在页面中出现的先后顺序对它们依次进行解析。换句话说,在第一个 `<script>` 元素包含的代码解析完成后,第二个 `<script>` 包含的代码才会被解析,然后才是第三个、第四个…… ## JavaScript 代码的书写位置 按照传统的做法,所有的 JavaScript 代码都需要书写在 `<head>` 标签当中,但是这样所有的 CSS 样式、JavaScript 脚本全部加载完成后,再加载 HTML 代码中的 body 部分,就会影响当前页面的加载速度,所以,推荐的书写 JavaScript 脚本的位置是在 body 的末尾部分,如下: ~~~ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>this is a test</title> </head> <body> <!-- 主体 HTML 代码部分--> <script type="text/javascript" src="howie.js"></script> <script type="text/javascript"> /* JavaScript 脚本书写位置 */ </script> </body> </html> ~~~ 这样书写,在解析 JavaScript 代码之前,页面的内容将会完全呈现在浏览器当,而用户也不会因为览器窗口显示空白页面而感觉到加载太慢了。 ## 建议书写方式 建议将所有的 `JavaScript` 文件及`CSS` 和 `HTML` 文件分开独立书写,做到**行为**、**样式**、**结构**相分离,这样结构会更加清晰,也更易于维护。