关于javascript 中的addLoadEvent重复实现函数问题

最近学习javascript的时候看的Javascript DOM编程艺术,中间作者提到了addLoadEvent()
函数,用来在页面加载完成后调用函数。
但发现有个函数会调用两次,求解答。
html文件代码:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>Hello</title>
    </head>
    <body>
        <script src="../script/addLoadEvent.js"></script>
        <script src="../script/new_file.js"></script>
        <script src="../script/new_file1.js"></script>
    </body>
</html>

js代码:

addLoadEvent.js

 function addLoadEvent(func) {
    var oldonload = window.onload;
    if(typeof window.onload != 'function') {
        window.onload = func;
    } else {
        oldonload();
        func();
    }
}

new_file.js代码:

 function fun1() {
    alert("fun1");
}


addLoadEvent(fun1);

new_file1.js代码:

 function fun2() {
    alert("fun2");
}

addLoadEvent(fun2);

运行时,会出现两次fun1 一直不懂,求大神解答

3个回答

function addLoadEvent(func) {
var oldonload = window.onload;
if(typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
oldonload();
func();//如果已经绑定了函数,就把新函数追加到现有指令的末尾
}
}
}

注意else部分是window.onload.

Leafage_M
繁城落叶 谢谢,
3 年多之前 回复
Leafage_M
繁城落叶 不好意思,是我没看清,谢谢了
3 年多之前 回复
Leafage_M
繁城落叶 我明白这个函数的实现原理,刚才发现如果在调用的时候在函数的后面加上(),例如addLoadEvent(fun1())的情况下不会重复调用,这是为什么的?
3 年多之前 回复

如果将addLoadEvent(fun1),修改成addLoadEvent(fun1()); 这样第一个绑定的函数就不会重复调用,这是为什么呢?fun1和fun1()有什么区别呢?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问