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

一个小问题

一个小问题

function one() { alert("one"); } function two() { alert("two"); } window.onload = one; window.onload = two; 1.此处调用函数为什么不用();?输出结果为two; 2.调用两个函数都加上括号输出结果都为one,two.为什么?
查看完整描述

2 回答

已采纳
?
精慕门9254224

TA贡献167条经验 获得超46个赞

第一,window.onload=two 不是调用函数,而是window的onload方法指向two ,赋值最后一次覆盖了前面的赋值,然后页面加载完成时,window对象才去调用onload 这个函数,而这个函数已指向two 函数,所以他调用的是two ;此时执行一下输出two;第二,window.onload =two ();他先调用一次one函数,然后将返回值付给window 的onload 函数,此时执行一下输出one ,无返回值意味着返回null 付给了window 的onload,然后再调用一次two 函数,将返回值付给window 的onload函数,此时执行一下输出two ;又把返回的null 赋值给window 的onload 方法,这下window 加载完毕后去调用onload函数发现是null ,便什么也没有执行!所以你说的两种写法函数的调用时机是不一样的!

查看完整回答
反对 回复 2017-09-01
?
橋本奈奈未

TA贡献436条经验 获得超108个赞

等号是赋值,加上括号的意思相当于执行函数然后把返回值赋给window.onload所以会弹出one、two;不加括号相当于将window.onload指向one、two函数,而后者的赋值会覆盖前者的赋值,所以实际上onload最终指向two这个函数,然后页面加载完触发load事件并执行two函数,所以弹层two

查看完整回答
2 反对 回复 2017-09-01
  • 2 回答
  • 0 关注
  • 1926 浏览
慕课专栏
更多

添加回答

举报

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