好烦恼,面试官老瞎问
一、这个问题谁注意过?
这个问题大家每天都会用,script标签,要么是内部写代码,vue组件里每个不也都有script标签嘛,数据依赖,methods,这些都会在里面,但如果是要外部引入呢,就是一个无内部内容的标签了。这很简单嘛
<html>
......
<script>
var age = 15;
console.log(age);
</script>
<!-- 或者是这样 -->
<script src="age.js"></script>
......
</html>
大家见惯不惯,因为这是国际标准,不管你去了下个团队,还是被外拍到了叙利亚,大家都是这么写。那么你有没有想过,如果像下面这段代码会怎么样呢?
<script src="age.js">
var age = 15;
console.log(age);
</script>
二、先看看结果
age.js里:
var age = 16;
console.log(age);
结果输出了16,很明显,执行了外部脚本,而非内部脚本。那么症结点在于这个src属性吗?他咋就比内部代码优先级更高了?
三、src属性
这个标签的src属性呢,是开发者指定外部脚本或者某些文件的路径(注意可以每次不只请求一个哦),浏览器会根据src属性值请求外部的文件,然后将外部文件的内容插入script标签内部,结果会覆盖原本script标签之间的内容,所以不管你内部写了多少代码,都会被覆盖掉。而且你请求<script src="age.txt" ></script>都是可以的。但age.txt里最好是js内容,只是文本类型不限制而已。
四、是不是又有了优化思路
既然浏览器的默认特性是将外部的js脚本,最终还是要下载,覆盖到内部,解析,执行,那么很多时候,如果你认为一些不必要放到外部去请求的js文件,是不是写到script内部,更直接的写出来会更优呢?