在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 原生js中的onload事件傳參問題,這段代碼依次彈出什么以及為什么會是這樣?

原生js中的onload事件傳參問題,這段代碼依次彈出什么以及為什么會是這樣?

window.onload=function(a,b){
    alert(onload.length);
    alert(arguments.length);
}
onload(3,4,5);
回答
編輯回答
何蘇葉

window.onload是窗口加載完成后的回調(diào),包括腳本JavaScript
所以onload(3,4,5)是js腳本,必須腳本執(zhí)行完畢后才會回調(diào)window.onload事件

  1. Function.length是方法定義時,形參的個數(shù),但是不包括(a,...arg)這種剩余參數(shù)也不包括默認(rèn)值(a=1)這種,所以 function test(a,...arg){}這個函數(shù)test.length1,function test(a,b=4,c){}也是1
  2. arguments.length是方法調(diào)用時實(shí)參的個數(shù)
2018年7月28日 12:08
編輯回答
乖乖瀦

結(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

  1. 首先,一個函數(shù)的 length 屬性,指的是定義時候參數(shù)的數(shù)量,也就是我們通常說的形參。因?yàn)?onload 定義時的參數(shù)是 a,b ,所以兩次結(jié)果都是 2
  2. arguments.length 指的是,函數(shù)實(shí)際運(yùn)行時傳的參數(shù),通常叫實(shí)參。手動調(diào)用 onload(3, 4, 5) 時傳了 3 個參數(shù),事件觸發(fā)調(diào)用 onload 時只傳了事件對象,所以只有 1 個參數(shù)
2017年8月22日 21:53