2 leafage m Leafage_M 于 2016.09.20 20:57 提问

关于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个回答

guwei4037
guwei4037   Ds   Rxr 2016.09.20 21:25
已采纳

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
Leafage_M 谢谢,
大约一年之前 回复
devmiao
devmiao   Ds   Rxr 2016.09.20 21:02
Leafage_M
Leafage_M 不好意思,是我没看清,谢谢了
大约一年之前 回复
Leafage_M
Leafage_M 我明白这个函数的实现原理,刚才发现如果在调用的时候在函数的后面加上(),例如addLoadEvent(fun1())的情况下不会重复调用,这是为什么的?
大约一年之前 回复
Leafage_M
Leafage_M   2016.09.20 21:08

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!