1.首先,script标签是什么?
script标签是在web中有一种非常重要的标签,它的存在才使得脚本可以引入dom文档,并且动态网页的实现也需要使用此标签
2.script标签都有哪些属性?(在HTML5当中)
- 在HTML5当中主要有以下几个属性:
属性 | 属性值 |
---|---|
async | 可选。表示应该立即下载脚本,但不应妨碍页面中的其他操作,仅适用于外部脚本,比如启用该选项之后,当脚本下载过程之中,直接渲染之后的html文档,下载完成之后,暂停渲染,执行该外部脚本,但是标记为 async 的脚本并不保证按照指定它们的先后顺序执行,后面的async脚本可能先于之前的async脚本。 |
charset | 可选。表示通过src属性指定的代码的字符集。由于大多数浏览器会忽略它的值,此属性值很少会被用到 |
defer | 可选。表示脚本可以延迟到文档完全被解析和显示之后再执行。只对外部脚本有效。跟放在Html文档最后面效果一致,但是defer更灵活。没有特别的位置需求,而且script只能操作在其之前的对象,defer使得此操作变得方便起来。 |
src | 可选。表示包含要执行代码的外部文件。 |
type | 可选。可以看成是language的替代属性;表示编写代码使用的脚本语言的内容类型 |
3.script标签的常用方法
(1)从外部引入脚本
<script type="text/javascript" src="demo.js"></script>
(2)在标签体中插入一个脚本(一段js代码)
<script type="text/javascript">
document.write("Hello World!")
</script>
(3)行内Js
<input type="button" value="测试" onclick="alert('点击')"/>
<a href="javascript:alert('dd')">URL主体</a>
4.script标签放置的位置
- 在Html文档中可以编写任意多的script标签,编写任意多的js代码。script标签可以放在
<body> 或 <head>当中。
5.不同位置的script标签的区别
- 如果将 JavaScript 放在 head 部分,整个 JavaScript 将在加载任何 HTML 之前加载,可能会导致一些问题:
1.如果JavaScript 中有代码会在 JavaScript 代码加载时立即更改 HTML,那么实际上还没有任何可用的 HTML 元素对其产生影响,因此看起来 JavaScript 代码似乎不起作用,而您可能会出错。
2.如果有很多 JavaScript,它会明显减慢页面的加载速度,因为它会在加载任何 HTML 之前加载所有 JavaScript。
当将 JavaScript 放在 HTML 正文的底部时,它会在任何 JavaScript 加载之前让 HTML 有时间加载,这可以防止错误并加快网站响应时间。
- 具体显示效果如下:
首先我们将script标签放在head当中进行测试,测试结果如下:
接下来我们将相同的script标签放在body当中,进行测试:
测试效果如下:
而出现以上效果的原因是脚本在h标签之前加载了。在加载脚本的时候,由于无法找到h标签的,最终导致无法改变颜色。
还有一种方式:外部JavaScript
JavaScript 也可用于外部文件。JavaScript 文件的文件扩展名为“.js”。要使用外部脚本,请将脚本文件的名称放在脚本标记的 src 属性中。
- 外部 JavaScript 有哪些优点:
1.分离 HTML 和 JavaScript 代码将有助于更轻松地管理代码库。
2.设计人员可以与编码人员并行工作而不会发生代码冲突。
3.适用于现代源代码版本控制系统,例如 GIT。这意味着这些文件中的每一个都将维护一个历史记录,并且可以由多个程序员签入、签出。
4.代码和 HTML 都易于阅读。
5。外部 JavaScript 文件由浏览器缓存,可以加快页面加载时间。
6.许多流行的 JavaScript 包都托管在内容交付网络 (cdn) 上,您可以使用src 中的 URL 简单地指向它们,从而避免将 js 文件复制到本地文件夹。
值得注意的是:大多数浏览器在加载含有<script>
标签的页面时,会发生如下情形:
1.获取 HTML 页面
2.开始解析 HTML
3.解析器遇到<script>引用外部脚本文件的标记。
4.浏览器请求脚本文件。同时,解析器会阻止并停止解析页面上的其他 HTML。
5.一段时间后,脚本被下载并随后执行。
6.解析器继续解析 HTML 文档的其余部分。
当浏览器请求脚本文件时会导致网页停止加载,带给用户不好的体验,而现在有解决办法如下:
- 异步和延迟
异步async:具有 async 属性的脚本是异步执行的。这意味着脚本在下载后立即执行,同时不会阻止浏览器。这意味着可以在脚本 1 之前下载和执行脚本 2。
<script src="path/script1.js" defer></script>
<script src="path/script2.js" defer></script>
延迟defer:具有 defer 属性的脚本按顺序执行(即第一个脚本 1,然后是脚本 2)。这也不会阻止浏览器。与异步脚本不同,延迟脚本仅在整个文档加载后才执行。
<script src="path/script1.js" defer></script>
<script src="path/script2.js" defer></script>