js里onload事件会执行几次?
代码如下:functionaddLoadEvent(func){varoldonload=window.onload;if(typeofwindow.onload!='f...
代码如下:
function addLoadEvent(func){
var oldonload=window.onload;
if(typeof window.onload != 'function'){
window.onload=func;
}
else{
window.onload=function(){
oldonload();
func();
}
}
}
function addload(){
alert("addload");
}
window.onload=alert("onload");
addLoadEvent(addload);
alert("last");
结果是先提示onload,然后提示last,最后再提示addload,请高手解答onload事件究竟会执行几次,另外执行的顺序又是如何?
补充问题:
1.请问为什么window.onload = alert("onload");与onload无关呢,alert方法应该也是函数吧?
2.如果把除addLoadEvent函数之外的代码改为以下代码,那弹出onload是否与onload事件有关呢?可这同样会弹出addload啊。代码如下:
function _onLoad(){
alert("onload");
}
function addload(){
alert("addload");
}
function last(){
alert("last");
}
window.onload=_onLoad;
addLoadEvent(addload);
last();
3.如问题中的代码,既有onload绑定调用的函数,也有直接调用的函数如last(),请问这些函数的调用顺序应该是如何,是先自顶向下调用完所有未绑定的函数,然后再调用onload事件绑定的函数吗? 展开
function addLoadEvent(func){
var oldonload=window.onload;
if(typeof window.onload != 'function'){
window.onload=func;
}
else{
window.onload=function(){
oldonload();
func();
}
}
}
function addload(){
alert("addload");
}
window.onload=alert("onload");
addLoadEvent(addload);
alert("last");
结果是先提示onload,然后提示last,最后再提示addload,请高手解答onload事件究竟会执行几次,另外执行的顺序又是如何?
补充问题:
1.请问为什么window.onload = alert("onload");与onload无关呢,alert方法应该也是函数吧?
2.如果把除addLoadEvent函数之外的代码改为以下代码,那弹出onload是否与onload事件有关呢?可这同样会弹出addload啊。代码如下:
function _onLoad(){
alert("onload");
}
function addload(){
alert("addload");
}
function last(){
alert("last");
}
window.onload=_onLoad;
addLoadEvent(addload);
last();
3.如问题中的代码,既有onload绑定调用的函数,也有直接调用的函数如last(),请问这些函数的调用顺序应该是如何,是先自顶向下调用完所有未绑定的函数,然后再调用onload事件绑定的函数吗? 展开
1个回答
展开全部
执行一次。
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function () {
oldonload();
func();
}
}
}
function addload() {
alert("addload");
}
// 执行到这里的时候直接弹出onload,与onload事件无关
window.onload = alert("onload");
// 监听onload事件,所以onload事件触发之后才会弹出addload
addLoadEvent(addload);
// 执行到这里的时候直接弹出last,与onload事件无关
alert("last");
追问
非常感谢你的回答,对我有很大的帮助,只是还有一些疑惑,希望能再辛苦你帮我解答一下,具体内容我写在补充问题里了。
追答
请问为什么window.onload = alert("onload");与onload无关呢,alert方法应该也是函数吧?
因为这里是调用alert函数,window.onload会接收alert函数的执行结果。
因为alert函数没有返回结果。所以window.onload还是没有监听任何东西。
这样弹出顺序是
"last", // 直接弹出
"onload", "addload" // onload事件触发之后弹出
直接调用的函数会马上执行,监听某个事件的函数是当那个事件发生的时候执行。
// 如果我们直接使用window.onload绑定几个函数
function fn1 () {alert('fn1')}
function fn2 () {alert('fn2')}
function fn3 () {alert('fn3')}
window.onload = fn1;
window.onload = fn2; // 覆盖了前面的
window.onload = fn3; // 覆盖了前面的
// 等onload事件触发的时候只弹出fn3
// 如果使用addLoadEvent函数绑定
function fn1 () {alert('fn1')}
function fn2 () {alert('fn2')}
function fn3 () {alert('fn3')}
addLoadEvent(fn1);
addLoadEvent(fn2);
addLoadEvent(fn3);
// 等onload事件触发的时候按绑定顺序弹出fn1,fn2,fn3
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询