最近一直在研究jq的源码,书写jq的代码咱们一般会包裹在一个$(function(){})
函数中,
jq的$(function(){})
也就是$(document).ready(function(){})
的简写,与之对应的原生js的window.onload
事件,这俩者之间到底有什么区别呢?
$(function () { console.log("ready执行"); }); $(function() { console.log("ready1执行"); }); window.onload = function () { console.log('load执行'); }; window.onload = function () { console.log('load1执行'); }$(function(){})$(function(){})$(document).ready(function(){})window.onload
咱们来看一下控制台中输出的结果: javascript
这里能够看出两点不一样:
1.$(function(){})
不会被覆盖,而window.onload
会被覆盖,我的感受$(function(){})
不会被覆盖的缘由是将其放入到了一个队列中,在对应时机一次出队。
2. $(function(){})
在window.onload
执行前执行的,$(function(){})
相似于原生js中的DOMContentLoaded
事件,在DOM加载完毕后,页面所有内容(如图片等)彻底加载完毕前被执行。而window.onload
会在页面资源所有加载完毕后才会执行。java
DOM文档加载步骤:
1.解析HTML结构
2.加载外部的脚本和样式文件
3.解析并执行脚本代码
4.执行$(function(){})
内对应代码
5.加载图片等二进制资源
6.页面加载完毕,执行window.onload
函数