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

本文回顾了《JavaScript高级程序设计》一书中关于script标签属性的知识点,如async、defer等特性,探讨了JavaScript如何影响页面加载流程,并分析了为何JavaScript采用单线程执行机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在还记得刚开始学习前端的时候是直接开始上手敲代码的,有很多基础都是没有认真去学习。想想当初也是太年轻了,有点浮躁。其实如果想要学好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通信,开启子线程做异步数据处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值