咱们在 《Javascript简史》这遍文章中说过,「Javascript」这门语言是由 Netscape开发而来,当初开发的时候为了能让 「Javascript」这门语言能与 HTML 页面共存,并且不影响页面的其余内容,为此增长了一个统一的脚本支持( script 脚本元素)。javascript
在 HTML 页面中使用「Javascript」语言主要的方法就是使用 script 元素,script 元素内部的代码从上而下依次执行。html
在引入多个 script 元素的时候,浏览器会按照 script 元素在页面的中的前后顺序进行解析,当上一个解析完成时,才会进行下一个 script 元素中的内容java
在 HTML 中使用 Javascript 的两种方法浏览器
//第一种方法:直接在标签内使用 javascript 便可 <script> console.log('第一种使用方法'); </script> //第二种方法:引用外部文件 <script src="example.js"></script>
script 元素比较经常使用的几个属性微信
因为「Javascript」语言是一门单线程语言,在同一时间内,只能执行一个任务,因此只有当上一个任务完成以后才能进行下一个任务,所以会致使 script 元素在 HTML 中的位置不一样,会表现出不一样效果。异步
全部 script 元素都放在 <head> 元素中async
这种作法意味着,咱们必须等待全部的 Javascript 代码必须执行完成以后才能开始展现页面的内容,若是页面的 Javascript 代码很是多,这种方法就会致使咱们看到页面的加载会很是慢,用户体验很是差,那么这么样去优化呢?其实很简单。学习
<!DOCTYPE html> <html> <head> <title></title> <script src="example1.js"></script> <script src="example2.js"></script> </head> <body> <div>页面的内容区域</div> </body> </html>
全部 script 元素都放在页面内容的后面优化
优化上面所说的页面加载慢的问题,只须要把咱们使用的 Javascript 代码放到页面的内容以后便可,这样页面会首先加载内容而后现实出来,再去执行 Javascript 代码,这样用户就不会等待好久页面才会显示内容。线程
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <div>页面的内容区域</div> <script src="example1.js"></script> <script src="example2.js"></script> </body> </html>
脚本如何进行延时加载,这个就要利用 script 元素的 defer 属性,在元素使用 defer 属性时,脚本会被延迟到整个页面解析完成后在执行。
//example1.js 中的代码 //console.log('example1'); //console.log(document.getElementById('content')); //example2.js 中的代码 //console.log('example2'); //console.log(document.getElementById('content')); <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script defer src="example1.js"></script> <script defer src="example2.js"></script> </head> <body> <div id="content">这里页面的内容</div> </body> </html>
你会发在没有加入 defer 属性时控制台会打印出以下结果
example1 null example2 null
当给元素加上 defer 属性时,结果会发生变化,能够发如今 div 元素的内容加载完成以后 Javascript 代码才会执行。
example1 <div id="content">这里页面的内容</div> example2 <div id="content">这里页面的内容</div>
脚本的异步加载,要用到 script 元素到 async 属性,它与 defer 属性相似,都是修改 script 元素的加载行为,不过 async 属性不会影响页面的其余加载,不会阻塞文档呈现,并且带有 async 属性的脚本不能保证它们执行的先后顺序,这一点与 defer 属性有着不一样之处。
换句话说 example2.js 的代码可能会先于 example1.js 中的代码执行,因此在使用 async 属性时,要避免两个 js 相互依赖。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script async src="example1.js"></script> <script async src="example2.js"></script> </head> <body> <div id="content">这里页面的内容</div> </body> </html>
早期的浏览器都会又一个问题,那就是当浏览器不支持 Javascript 语言时如何显示页面内容,为此的解决方案就是建立了一个 noscript 元素,它能够在不支持 Javascript 的浏览器中显示内容,并且只会在不支持 Javascript 的浏览器中才会显示其中的内容。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script async src="example1.js"></script> <script async src="example2.js"></script> </head> <body> <noscript> 当前浏览器不支持 Javascript 请更换浏览器 </noscript> </body> </html>
关注微信公众号:六小登登。领取全套学习资源