猿问

原生js中的onload事件传参问题,这段代码依次弹出什么以及为什么会是这样?

window.onload=function(a,b){

    alert(onload.length);

    alert(arguments.length);

}

onload(3,4,5);


肥皂起泡泡
浏览 1061回答 2
2回答

慕斯709654

结果的话,我就不列了,相信题主自己试过了,下面主要解释下原因:onload 函数会被调用两次第一次是你手动调用 onload(3, 4, 5) 触发(实际调用的是 window.onload(1, 2,3))第二次是事件函数被动触发至于为什么 onload(3, 4, 5) 先调用,题主可以去 google 一波 js 的事件循环相关主题下面来解释下为什么 4 次弹出的值分别是 2,3,2,1首先,一个函数的 length 属性,指的是定义时候参数的数量,也就是我们通常说的形参。因为 onload 定义时的参数是 a,b ,所以两次结果都是 2arguments.length 指的是,函数实际运行时传的参数,通常叫实参。手动调用 onload(3, 4, 5) 时传了 3 个参数,事件触发调用 onload 时只传了事件对象,所以只有 1 个参数

凤凰求蛊

window.onload是窗口加载完成后的回调,包括脚本JavaScript所以onload(3,4,5)是js脚本,必须脚本执行完毕后才会回调window.onload事件Function.length是方法定义时,形参的个数,但是不包括(a,...arg)这种剩余参数也不包括默认值(a=1)这种,所以 function test(a,...arg){}这个函数test.length是1,function test(a,b=4,c){}也是1arguments.length是方法调用时,实参的个数
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答