为了账号安全,请及时绑定邮箱和手机立即绑定

关于window.onload和$(document).ready

关于window.onload和$(document).ready

SMILET 2019-03-21 18:15:57
js代码window.onload=function(){   console.log(2)}console.log(1)html 代码什么都没有,只分别:在head标签中引入上述jsbody标签最后引入html标签外引入然后对比三种情况的控制台。第一种情况:先1后2,不难理解 因为在head中DOM还没加载完 所以先1 等文档加载完毕输出2第二种情况:我的理解是 在最后引入js dom已经加载完毕应该先2后1 很不幸 本人测试结果还是先1后2第三种情况:将script写在整个html跟标签之外,很不幸 还是先1后2测试了jquey的read函数 结果相同(手机打字没有图不好意思了)
查看完整描述

3 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

这个问题的本质不是 DOMContentLoaded 和 load 问题。

题主可以打开 devtools,选择网络

https://img1.sycdn.imooc.com//5c9dc067000161f703390229.jpg

刷新页面,可以看到:

https://img1.sycdn.imooc.com//5c9dc0690001035805050040.jpg

两者是同步发生的。

言外之意是,js 阻塞了页面的载入和渲染。

那么我们再看一下性能面板:

我以第二种情况举例。

点击这个重新载入,或者使用快捷键:

https://img1.sycdn.imooc.com//5c9dc06b00018ae105800279.jpg

我们会得到一个火焰图,由于代码很简单,所以我们很容易定位。

由于之前页面载入的时间是 2.6s,所以这次我们等待 3s 钟:

https://img1.sycdn.imooc.com//5c9dc06e0001371508000294.jpg

可以很清楚的看到,console.log 先执行的。


查看完整回答
反对 回复 2019-03-29
?
桃花长相依

TA贡献1860条经验 获得超8个赞

首先,你声明的是 js 的回调函数,js 引擎在解析时碰到回调函数会将它抛到一个事件队列中,在其它代码执行完且触发条件出现时(此处触发条件为 window.onload)才会执行。
其次,window.onload 发生在所有文件加载完之后。

查看完整回答
反对 回复 2019-03-29
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

  1. jQ的.ready()对应的是DOMContentLoaded事件,而不是load;

  2. .ready()的推荐写法是$(function(){});或者jQuery(function($) {});

  3. script写在整个html根标签之外?这是非标准写法。


查看完整回答
反对 回复 2019-03-29
  • 3 回答
  • 0 关注
  • 390 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信