html文件中script标签放在哪里?

本文探讨了HTML中JS脚本的不同放置位置及其影响,详细分析了<head>和</body>前的脚本执行时机,通过实例演示如何实现页面元素加载后的脚本执行。
该文章已生成可运行项目,

首先说选择,常见的位置有两个,一个位置是<head>标签里面,另一个是body标签快结束的地方,也就是</body>上面。

然后说结论,一般情况下都可以放。区别嘛可以看个例子(scriptlocation.html):

<!DOCTYPE html>
<html lang="cn">
<head>
	<meta charset="UTF-8">
	<title>script标签的位置</title>
	<script type="text/javascript">
		function btnClick() {
				alert('helloWorld!');
			};
	
	</script>
</head>
<body>
	<input type="button" id="btn"  value="点击我" onclick="btnClick();">
</body>
</html> 

 这是一个最简单点击按钮弹窗的Demo,此时我们给<input>标签添加了onclick事件并添加了btnClick方法。这种情况下是没有问题的。但是如果来个新需求:修改btn按钮的绑定事件,初步修改代码如下:

<!DOCTYPE html>
<html lang="cn">
<head>
	<meta charset="UTF-8">
	<title>script标签的位置</title>
	<script type="text/javascript">
		function btnClick() {
				alert('helloWorld!');
			};
		document.getElementById("btn").onclick = function() {
				alert('hello777!');
			};
	</script>
</head>
<body>
	<input type="button" id="btn"  value="点击我" onclick="btnClick();">
</body>
</html> 

可是这样那个下面的绑定的匿名函数并没有发挥作用,结果还是HelloWorld!。这就是写在<head>标签里的问题:在页面DOM元素加载完之前,js脚本就已经执行完了。所以最后绑上的还是btnClick(),这也侧面说明这个位置的js适合做一些全局定义且后期不怎么变化的事情

你可能会觉得把οnclick="btnClick();"去掉不就行了吗?那你可以试试,看有什么效果,就明白为什么了。

接下来就可以试试第二个位置:

<!DOCTYPE html>
<html lang="cn">
<head>
	<meta charset="UTF-8">
	<title>script标签的位置</title>
	<script type="text/javascript">
		function btnClick() {
				alert('helloWorld!');
			};
	</script>
</head>
<body>
	<input type="button" id="btn"  value="点击我" onclick="btnClick();">
	<script type="text/javascript">
		document.getElementById("btn").onclick = function() {
				alert('hello777!');
			};
	</script>
</body>
</html> 

效果拔群,因为这个位置的js就是等页面元素加载完才执行的

最后,如果只想写在head里而又想达到这个效果,那么可以试试把代码写进onload事件中(简单理解就是等页面加载好的一个事件),使其成为内嵌函数。

<!DOCTYPE html>
<html lang="cn">
<head>
	<meta charset="UTF-8">
	<title>script标签的位置</title>
	<script type="text/javascript">
		function btnClick() {
				alert('helloWorld!');
			};
		onload = function() {
				document.getElementById("btn").onclick = function() {
				alert('hello777!');
			};
		}
	</script>
</head>
<body>
	<input type="button" id="btn"  value="点击我" onclick="btnClick();">
</body>
</html> 

 

本文章已经生成可运行项目
### HTML 中 `<script>` 标签的最佳放置位置HTML 文档中,`<script>` 标签的放置位置直接影响页面的加载性能和用户体验。通常情况下,推荐将 `<script>` 标签放在 `<body>` 标签的底部[^1]。这种做法的主要原因是避免 JavaScript 文件阻塞 HTML 的解析过程,从而加快页面内容的呈现速度。 #### 放置在 `<body>` 底部的优势 当 `<script>` 标签位于 `<body>` 标签的底部时,HTML 解析器能够优先完成页面内容的渲染,然后再处理 JavaScript 文件。这样可以显著减少页面空白时间(White Screen Time),使用户更快地看到页面的内容[^3]。此外,这种方法还能确保 DOM 元素已经完全加载完毕,这对于需要操作 DOM 的脚本尤为重要。 #### 放置在 `<head>` 中的情况 虽然一般建议将 `<script>` 标签放在 `<body>` 底部,但在某些特殊场景下,也可能需要将其置于 `<head>` 部分。例如,当脚本需要在页面渲染之前运行以初始化必要的配置或检测环境时,就可以考虑这种方式[^3]。然而,需要注意的是,直接将同步脚本放入 `<head>` 可能会阻碍 HTML 的正常解析流程,进而降低页面的整体加载效率。 #### 使用 `defer` 和 `async` 属性优化加载策略 为了进一步改善性能表现,还可以通过设置 `<script>` 标签的 `defer` 或 `async` 属性来调整脚本的执行时机。其中: - **`defer`**:表示脚本将在整个文档解析完成后才被执行,并且多个带 `defer` 的脚本会按照它们出现的顺序依次运行。 - **`async`**:意味着脚本会被异步下载并立即执行,而不会等待其他资源或者后续代码的加载。 这些属性可以帮助开发人员更好地控制脚本加载的行为,同时兼顾性能与功能性需求。 ```html <!-- 推荐的方式 --> <body> <!-- 页面主要内容 --> <script src="main.js"></script> </body> <!-- 结合 defer 属性 --> <head> <script src="library.js" defer></script> </head> <!-- 异步加载外部库 --> <script src="analytics.js" async></script> ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值