猿问

一个小问题

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


自由的气息
浏览 1947回答 2
2回答

精慕门9254224

第一,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 ,便什么也没有执行!所以你说的两种写法函数的调用时机是不一样的!

橋本奈奈未

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