求解:jquery是如何实现多个$(function(){})顺序执行

如题所述

没深入研究过,但是原理肯定是利用堆栈。因为实际上这个操作并不完全是由jQuery实现的,jQ也是利用了原生js的addEventListener方法。其实你可以利用数组模仿,例如

var demo = [];
for (i = 0; i < 10; i ++) demo.push(i);//入栈
var num = null;
while (num = demo.shift()) {
alert(num);//demo.shift(),数组的第一个元素弹出。相反的demo.pop(),最后一个元素弹出。
}

追问

比如我在一个html里面,这样定义了一下。

然后我想在一个base.js里顺序执行这两个方法,上面您给的答案似乎行不通啊

追答

window.$onload = ...这样不是变量赋值了么,第二次的覆盖掉第一个咯。

window.$onload = [];
window.$onload.push(function($){$('button').button();});
window.$onload.push(function($){$.jwf.act.notify('...');});
//base.js
var cbFn = false;
while(cbFn = window.$onload.shift()) cbFn(jQuery);

你试试看

追问

上面的方法可以解决,但是如果不同的js里面要window.$onload.push(...)的话,window.$onload = [];怎样定义才不会被覆盖掉?我的想法是在一个base.js里面定义window.$onload = [];在每一个html中引入,不知道这样是不是不太好呀,您还有更改的方法么

追答

window.$onload === undefined && window.$onload=[];

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-19
写在上面的先执行,写在下面的后执行。。
相似回答