眾所周知殖卑,在HTML中如果你想使用JavaScript腳本,那么必定少不了<script></script>標(biāo)簽菩鲜,<script></script>此標(biāo)簽是在HTML中插入JavaScript腳本的主要方法睦袖。
我們當(dāng)然熟悉它的使用,就像這樣:
<script type=”text/javascript”>
function fn() {
console.log("this is javascript");
}
</script>
還可以是這樣:
<script type=”text/javascript” src=”js/index.js”></script>
當(dāng)然我們要說的并不是如何再HTML中引入JavaScript荣刑,而是我們或許未曾深究過的scirpt標(biāo)簽屬性馅笙。或許你從未關(guān)注過它的一些屬性厉亏,只知道type和src董习,更甚至從來都是用編輯器自動生成,那么下面要說的可能對你有很大的幫助皿淋。
script標(biāo)簽有6個屬性:async、charset恬试、defer窝趣、language、src训柴、type.
charset:這個屬性表示你引入的外部文件的字符集哑舒,但是如今的瀏覽器會自動忽略它,你可以放心的把這個屬性拋之腦后幻馁,永遠(yuǎn)的塵封起來洗鸵。
language:此屬性已廢棄越锈,就像charset一樣,你完全可以忽略它膘滨。
src:引入外部腳本文件的地址甘凭。
type:此屬性在某種意義上可以說是language的替代屬性,它的值其實(shí)多種多樣火邓,但是目前來看丹弱,”text/javascript”是最好也是最簡單的值。如果你的編輯器不會自動生成此屬性贡翘,而且你又不喜歡每次都輸入蹈矮,這完全沒有問題,它的默認(rèn)屬性就是”text/javascript”鸣驱。
提示:重點(diǎn)來了泛鸟,大家集中精神。
async:表示立刻執(zhí)行下載腳本踊东,但是并不會讓頁面中其他操作等待北滥。此屬性只能對外部引入文件生效。
比如這樣:
// index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript" src="index.js" async="async"></script>
</head>
<body>
<div id="example"></div>
</body>
</html>
// index.js
var o = document.getElementById('example');
console.log(o);
打開html文件并且打開控制臺闸翅,你會發(fā)現(xiàn)再芋,它并沒有像往常一樣報錯,而是顯示出了DOM節(jié)點(diǎn):
是不是很神奇坚冀,對济赎,async就如你看到的這樣,在腳本加載的同時记某,DOM也在渲染司训,并不會讓script標(biāo)簽下面的DOM節(jié)點(diǎn)等待而造成阻塞。
defer:表示腳本可以在DOM全部渲染完畢并且顯示之后執(zhí)行液南,也同樣只是使用于外部引入文件壳猜。
此屬性和你這樣做沒有什么區(qū)別:
<!--html… -->
</body>
</html>
<script></script>
意思就是在head里面引入了帶defer屬性腳本文件相當(dāng)于放在了html標(biāo)簽后執(zhí)行,當(dāng)然如果他們有兩個或者多個呢滑凉?
<!--html… -->
<script type=”text/javascript” src=”test1.js” defer=”defer”></script>
<script type=”text/javascript” src=”test2.js” defer=”defer”></script>
<!--html… -->
沒錯统扳,他們會按順序執(zhí)行。
雖然加上此屬性的script標(biāo)簽和放在底部的script標(biāo)簽表現(xiàn)相同畅姊,但是我們把它放在底部仍然是最好的選擇咒钟。
OK,對于script標(biāo)簽的屬性暫且說到這里若未,如果你意猶未盡朱嘴,想對defer和async進(jìn)行深入的研究,你可以點(diǎn)擊這里陨瘩。
如果你在閱讀的過程中發(fā)現(xiàn)錯誤腕够,請在下方評論中指出!