javascript - 关于 js onload事件一次只能保存对一个函数的引用
高洛峰
高洛峰 2017-04-10 17:17:49
[JavaScript讨论组]

在学习过程中,看到书上的例子中 onload 事件一次只能保存对一个函数的引用,它会自动用后面的函数覆盖前面的函数。
在编写列子的过程中,如果写法为:

    <script>
            function one(){
                alert("one");

            }
            function two(){
                alert("two");
            }
            window.onload = one;
            window.onload = two;
    </script>

显示的结果确实为只弹出了two,而one被覆盖
而如果改写为

            window.onload = one();
            window.onload = two();

则显示两个函数都可以弹出,依次为one,two
书中所说的引用是否就是one,与one()这两种写法的区别,应该如何理解呢?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(5)
PHP中文网
// tips:
// (1)赋值表达式的结合性:从右到左。
// (2)JavaScript的函数如果加上一堆小括号,亦即(),就表示立即执行该函数。

// 其实,下面是两个赋值表达式,每个表达式都是将一个函数执行的结果赋值给window.onload。
// 你看到了,函数one和函数two被执行了,是因为你在赋值时,执行了函数one和函数two,然后将将函数的返
// 回值赋值给window.onload。

// your code
window.onload = one();
window.onload = two();
大家讲道理
window.onload = one();
window.onload = two();

因为这样写,加载到这一句就直接执行了,并不会等到onload完成。

阿神

onload 事件一次只能保存对一个函数的引用,而引用的目的是要调用,调用之后,这个函数就会被释放,成为垃圾被回收,而 window.onload = one();window.onload = two();这样是onload两次事件,引用跟调用写在一起,分别执行。

怪我咯
function one(){console.log(1)}
window.onload === null  //true

window.onload = one;

typeof window.onload === "function" //true

window.onload = one();  //1

window.onload === null //true;
高洛峰

window.onload 是通过赋值方式定义的事件,后一次赋值会覆盖前一次赋值。

window本质上还是一个 Object,和下边的代码没有区别:

var _windows = {a:1,b:2};
_windows.b = 3;
_windows; // Object {a: 1, b: 3}

如果需要定义多个 window.onload,而又想使用原生代码实现,有下面的代码就可以了。

function _onload(fun){
    var _fun = window.onload;
    if( typeof _fun == "function"){
        window.onload = function(){
            _fun();
            fun();
        };
    }else{
        window.onload = fun;
    }
}
function one(){
    alert("one");
}
function two(){
    alert("two");
}
_onload(one);
_onload(two);
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号