本人学习java的,对javascript里面$(doucument).ready({})和window.onload那些方法里面的加载顺序不太理解,且javascript中的回调函数又是怎么一回事,一直没办法和java中的方法区分开来,求指教
$(document).ready要比window.onload先执行。
js的回调用类似java8的lambda,以及java之前版本的通过一个接口传一个方法给一个函数,让函数反过来调用(比如给sort方法传comparator)
所谓回调,就是调用者定义函数(而不是被调用者/类库),传给被调用者/类库,由类库反过来调用你定义的函数,所以叫回调。回调主要用来触发事件(比如onload)或者让用户传入自定义代码(比如排序方法传入比较函数)
DOM文档加载步骤:
1.解析HTML结构
2.加载外部的脚本和样式文件
3.解析并执行脚本代码
4.执行$(function(){})内对应代码
5.加载图片等二进制资源
6.页面加载完毕,执行window.onload
javascript回调函数:
1.请求服务器
2.返回数据
3.javascript根据返回状态值判断调用哪个函数
eg:这个是一个异步的过程,主要由XMLHttpRequest对象完成,了解一下~
首先$(doucument).ready({})和window.onload相比 window.onload 会先执行,这个你没必要去纠结,如果问为什么的话有很大一堆原因,这个需要你对底层有一定了解的
然后你问 setTimeout内的tipdisapper函数为什么 setTimeout 先执行但是tipdisapper定义,这个加载顺序是,首先java在解析js文件的时候会先加载整个js最外层定义的function函数,也就是 tipdisapper 在这时候就已经被解析了,然后当所有的解析工作执行完后 才会来执行ready里面定义的初始需要执行的业务逻辑,也就是这时候才会 调用 setTimeout 绑定 tipdisapper函数。
也就是实际上tipdisapper函数会先被解析然后 setTimeout才会进行绑定。
最后javascript中的回调函数是怎么一回事:这个问题 可以理解成一个结束事件,就像你单击鼠标一样,你应该先单击然后才会触发单击的事件,
而回调函数就是一个 函数(也就是事件)执行完毕后去执行的一段业务逻辑(也就是单击鼠标后的事件)。
谷歌浏览器f12-network可以看到这两个的值,如:DOMContentLoaded:3.69s | load:3.82s
DOMContentLoaded是dom渲染完毕后执行的回调事件,load必须是dom渲染完毕且外部一些图片加载完毕后执行的事件,也就是window。onload
而jquer的read()就是监听DOMContentLoaded事件,所以$(document).ready要比window.onload先执行.