自己尝试了一样不同浏览器有不同的结果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Script</title> <script type="text/javascript"> document.write("Hello Imooc!"); document.write("我是写在Script标签中的文字!") </script> <script type="text/javascript" src="asii.js"></script> <!-- async:规定一旦脚本可用,则会异步执行. --> <script async="async" src="as22.js "></script> <!-- derfer规定当前页面已加载完成,才会执行脚本 --> <script defer="defer" src="der33.js"></script> </head> <body> <p>这里是写在body中的文字!</p> </body> </html>
Google 第一出现文字(documen.write的,引入文件的,body的全出来)(像这样你好Imooc!我是写在脚本标签中的文字! 这里是写在脚本文件中的文字
这里是写在body中的文字!
)第二弹出defer
第三弹出async
firefox 第一出现async,紧接着出现文字,这两个分不清哪个先出现,但是firefox弹框有遮罩效果我感觉遮罩先出来的,最后出面的是defer
Microsoft Explorer 就是老师出现的练习效果,先出来defer弹框,点击后出现文字,最后出现async弹框
为什么会出面这种情况 不理解
我想说一下我理解的这两者的区别,看哪里理解的不对还请老师指点
用script标签引入文件(async和defer这两个文件)如果在body的情况下)
async和defer都是异步加载js文件(因为浏览器的内核是多线程的,async是异步加载,浏览器又开启一个子线程来加载文件但不影响后续文档元素渲染,但如果js文件加载完成之后就会立即执行,
defer也是(异步加载),后续文档元素渲染的加载和js文件同时进行,在所有元素渲染完成之后在执行文件.
这里怎么个同时进行是也开启一个线程吗?还是?)
正在回答
同学你好, 同学对两者的理解是对的,defer也是开始另一个线程,同时加载js的html、css文件,与async不同的是它是加载完后不会执行,会等到整个页面加载完之后再执行。
由于不同的浏览器解析机制存在差异造成的, 这是浏览器的兼容性问题,不用太纠结。这个在实际开发中不用,跟着课程简单的了解一下就行。
如果我的回答,帮助到了你,欢迎采纳,祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星