为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

肥皂起泡泡 2019-03-14 17:15:41
window.onload=function(a,b){    alert(onload.length);    alert(arguments.length);}onload(3,4,5);
查看完整描述

2 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

结果的话,我就不列了,相信题主自己试过了,下面主要解释下原因:

onload 函数会被调用两次
第一次是你手动调用 onload(3, 4, 5) 触发(实际调用的是 window.onload(1, 2,3))
第二次是事件函数被动触发

至于为什么 onload(3, 4, 5) 先调用,题主可以去 google 一波 js 的事件循环相关主题

下面来解释下为什么 4 次弹出的值分别是 2,3,2,1

  1. 首先,一个函数的 length 属性,指的是定义时候参数的数量,也就是我们通常说的形参。因为 onload 定义时的参数是 a,b ,所以两次结果都是 2

  2. arguments.length 指的是,函数实际运行时传的参数,通常叫实参。手动调用 onload(3, 4, 5) 时传了 3 个参数,事件触发调用 onload 时只传了事件对象,所以只有 1 个参数


查看完整回答
反对 回复 2019-03-23
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

window.onload是窗口加载完成后的回调,包括脚本JavaScript
所以onload(3,4,5)是js脚本,必须脚本执行完毕后才会回调window.onload事件

  1. Function.length是方法定义时形参的个数,但是不包括(a,...arg)这种剩余参数也不包括默认值(a=1)这种,所以 function test(a,...arg){}这个函数test.length1function test(a,b=4,c){}也是1

  2. arguments.length是方法调用时实参的个数


查看完整回答
反对 回复 2019-03-23
  • 2 回答
  • 0 关注
  • 1060 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信