您的位置:首页 > Web前端 > JavaScript

JavaScript高级程序设计:深入理解script标签

2018-03-29 14:51 841 查看
现在还记得刚开始学习前端的时候是直接开始上手敲代码的,有很多基础都是没有认真去学习。想想当初也是太年轻了,有点浮躁。其实如果想要学好JS的话,这些基础是绕不过去的。于是,也是在面试官的推荐下吧,沉下心来开始学习《JavaScript高级程序设计》这本书,这里记录一下自己在这本书中自己曾经漏过的知识点。

script标签属性

script元素的属性

async:应该立即下载脚本,但是不应该妨碍页面中的其他操作。(空闲时下载)

charset:设置指定代码的字符集

defer:延迟加载(延迟到文档完全被解析和显示之后),立即下载但延迟执行

language :已废弃

src

type

script在加载时会阻塞当前页面的其他操作

包含在
<script>
标签中的代码会被浏览器的JS引擎从上到下依次解释。但是需要注意的是:在
<script>
标签中所有代码求值完毕之前,页面中的其余内容都不会被浏览器加载或显示。

与解析嵌入式的JavaScript代码一样,在解析外部JavaScript文件(包括下载该文件)时,页面的处理也会暂时停止。

解析JavaScript时,如果JS代码中遇到了“
</script>
” 字符串,将会停止解析,抛出错误。

外部JS文件其实不需要js扩展名

按照惯例,外部JavaScript文件带有.js扩展名。但这个扩展名不是必需的。因为浏览器不会检查包含JavaScript的文件的扩展名。如果不使用.js扩展名,请确保服务器能够返回正确的MIME类型。

为什么JavaScript是单线程的?

如果JavaScript是多线程的话,一个线程操作dom并且删除了这个dom,而另一线程打算修改dom….该以哪个线程为准呢?这个时候肯定需要线程锁来保证线程安全,也就会有很复杂的线程同步问题。而作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这限制了它只能是单线程。

但是我并不明白这种逻辑,我认为JS是可以实现多线程的。不过可以像Android那样,子线程不能够操作UI。这样就避免了同步问题。后来了解到HTML5中有了web worker,其实也就是像安卓那样通过postmessage通信,开启子线程做异步数据处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: