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事件绑定的函数吗?
展开
 我来答
zhaoapk
2013-12-02 · TA获得超过3771个赞
知道大有可为答主
回答量:1343
采纳率:40%
帮助的人:1610万
展开全部

执行一次。

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");
追问
非常感谢你的回答,对我有很大的帮助,只是还有一些疑惑,希望能再辛苦你帮我解答一下,具体内容我写在补充问题里了。
追答
  1. 请问为什么window.onload = alert("onload");与onload无关呢,alert方法应该也是函数吧?

    因为这里是调用alert函数,window.onload会接收alert函数的执行结果。

    因为alert函数没有返回结果。所以window.onload还是没有监听任何东西。

  2. 这样弹出顺序是

    "last", // 直接弹出

    "onload", "addload" // onload事件触发之后弹出

  3. 直接调用的函数会马上执行,监听某个事件的函数是当那个事件发生的时候执行。

// 如果我们直接使用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
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式