JS新手请问大家addLoadEvents的原理是什么?
<script>
window.onload = function(){
console.log("这个是window.onload默认的绑定事件.")
}
function addLoadEvents(fn){
var oldEvents = window.onload;
if(typeof oldEvents != 'function'){
window.onload = fn;
}else{
window.onload = function(){
oldEvents();
fn();
}
}
}
function fn1(){
console.log("这个是追加fn1");
}
function fn2(){
console.log("这个是追加fn2");
}
function fn3(){
console.log("这个是追加fn3");
}
addLoadEvents(fn1);
addLoadEvents(fn2);
addLoadEvents(fn3);
</script>
这个是打印结果:是正常的而且令人满意的.
这个是window.onload默认的绑定事件.
这个是追加fn1
这个是追加fn2
这个是追加fn3
但是从代码运行来看打印的结果应该是这样的呀:
这个是window.onload默认的绑定事件.
这个是追加fn1
这个是window.onload默认的绑定事件.
这个是追加fn2
这个是window.onload默认的绑定事件.
这个是追加fn3
为什么很巧妙的规避默认window.onload事件函数的重复执行了呢? 麻烦大家,谢谢!
其实也不巧妙吧,刚才看得有点懵逼。
试着用一个i来记录,才意识到,这个onload就执行了一次,因为addLoadEvents把onload回调改写了:先执行前一个onload回调,然后再执行新回调。
所以代码一走下来,就是
默认的回调+fn1的执行+fn2+fn3
;所以可以看到执行结果是