JavaScript (JS) 是一种编程语言,为通常用于客户端(client-side)的网页动态脚本,不过,也常通过像Node.js这样的包,用于服务器端(server-side)。<script> 标签可出现在HTML的任意位置。也可以多个<script> 标签。
<script> document.write("这是script输出的字符!") </script>
属性 | 值 | 描述 |
---|---|---|
src | URL | 规定外部脚本的 URL。外部脚本文件的 URL:
|
async![]() | async | 规定异步执行脚本(仅适用于外部脚本)。 |
defer | defer | 规定当页面已完成解析后,执行脚本(仅适用于外部脚本)。 |
charset | charset | 规定在脚本中使用的字符编码(仅适用于外部脚本)。 |
type | MIME-type | 规定脚本的 MIME 类型。MIME 类型一些常用的值:
|
xml:space | preserve | HTML5 不支持。规定是否保留代码中的空白。 |
定外部脚本文件,方便多个页面引用和维护,比方多个页面需要使用相同javaScript脚本代码,把JS定义为外部文件,通过src属性在每个页面引入即可。如果使用 "src" 属性,则 <script> 元素必须是空的。外部脚本文件不能包含 <script> 标签。
HTML文件
<script src="/Template/Test/js/my.js"></script>
my.js
alert("这是外部文件输出的字符!");
async 属性一旦脚本可用,则会异步运行,这里说一下同步和异步,同步就是一行一行的执行,直到上面的执行为完成,只能做这一件事,异步根据代码可先执行后面的代码,像定时任务、ajax 请求,动态<img>加载、事件绑定这些场景都是异步。
HTML文件
<p id="p1">Hello World!</p> <script src="/Template/Test/js/async.js" async></script>
async.js
alert(document.getElementById("p1").firstChild.nodeValue);
页面已加载后才会运行脚本。
HTML文件
<script src="/Template/Test/js/defer.js" defer></script> <p id="p1">Hello World!</p>
defer.js
alert(document.getElementById("p1").firstChild.nodeValue);
async 属性和defer 属性区别
没有 defer 或 async,浏览器会立即加载并执行指定的脚本,“立即”指的是在渲染该 script 标签之下的文档元素之前,也就是说不等待后续载入的文档元素,读到就加载并执行。
有 async,加载和渲染后续文档元素的过程将和 script.js 的加载与执行并行进行(异步)。
有 defer,加载后续文档元素的过程将和 script.js 的加载并行进行(异步),但是 script.js 的执行要在所有元素解析完成之后,DOMContentLoaded 事件触发之前完成。 接着,我们来看一张图咯: 蓝色线代表网络读取,红色线代表执行时间,这俩都是针对脚本的;绿色线代表 HTML 解析。 |
charset 属性规定在外部脚本文件中使用的字符编码。
<script charset="windows-1256" src="/Template/Test/js/charset.js" ></script>
![]() | 谷歌浏览器不支持该script标签charset属性 |
type 属性规定脚本的 MIME 类型。script标签默认是text/javascript。
<script> document.write("这是没定义type属性"); </script> <script type="text/javascript"> document.write("这是定义了type属性"); </script>
<script>标签支持HTML 全局属性