2 回答

TA貢獻(xiàn)1840條經(jīng)驗(yàn) 獲得超5個(gè)贊
結(jié)果的話,我就不列了,相信題主自己試過了,下面主要解釋下原因:
onload 函數(shù)會被調(diào)用兩次
第一次是你手動調(diào)用 onload(3, 4, 5)
觸發(fā)(實(shí)際調(diào)用的是 window.onload(1, 2,3))
第二次是事件函數(shù)被動觸發(fā)
至于為什么 onload(3, 4, 5)
先調(diào)用,題主可以去 google 一波 js 的事件循環(huán)相關(guān)主題
下面來解釋下為什么 4 次彈出的值分別是 2,3,2,1
首先,一個(gè)函數(shù)的 length 屬性,指的是定義時(shí)候參數(shù)的數(shù)量,也就是我們通常說的形參。因?yàn)?onload 定義時(shí)的參數(shù)是 a,b ,所以兩次結(jié)果都是 2
arguments.length
指的是,函數(shù)實(shí)際運(yùn)行時(shí)傳的參數(shù),通常叫實(shí)參。手動調(diào)用onload(3, 4, 5)
時(shí)傳了 3 個(gè)參數(shù),事件觸發(fā)調(diào)用onload
時(shí)只傳了事件對象,所以只有 1 個(gè)參數(shù)

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個(gè)贊
window.onload
是窗口加載完成后的回調(diào),包括腳本JavaScript
所以onload(3,4,5)
是js腳本,必須腳本執(zhí)行完畢后才會回調(diào)window.onload
事件
Function.length是方法定義時(shí),形參的個(gè)數(shù),但是不包括
(a,...arg)
這種剩余參數(shù)也不包括默認(rèn)值(a=1)
這種,所以function test(a,...arg){}
這個(gè)函數(shù)test.length
是1
,function test(a,b=4,c){}
也是1
arguments.length
是方法調(diào)用時(shí),實(shí)參的個(gè)數(shù)
添加回答
舉報(bào)