:95%的人都回答不上來的問題:函數(shù)的length是多少?說實(shí)話這道題,我一開始也沒答出來。其實(shí)我是知道,面試官想考Number
原型上的toString
方法,但是我卡在了toString函數(shù)的length是多少這個(gè)難題上。所以才有了今天這篇文章
到底是多少?
形參個(gè)數(shù)
咱們來看看下面這個(gè)例子
function fn1 () {}
function fn2 (name) {}
function fn3 (name, age) {}
console.log(fn1.length) // 0
console.log(fn2.length) // 1
console.log(fn3.length) // 2
可以看出,function
有多少個(gè)形參,length
就是多少。但是事實(shí)真是這樣嗎?繼續(xù)往下看
默認(rèn)參數(shù)
如果有默認(rèn)參數(shù)的話,函數(shù)的length
會(huì)是多少呢?
function fn1 (name) {}
function fn2 (name = '林三心') {}
function fn3 (name, age = 22) {}
function fn4 (name, age = 22, gender) {}
function fn5(name = '林三心', age, gender) { }
console.log(fn1.length) // 1
console.log(fn2.length) // 0
console.log(fn3.length) // 1
console.log(fn4.length) // 1
console.log(fn5.length) // 0
說明了,function
的length
,就是第一個(gè)具有默認(rèn)值之前的參數(shù)個(gè)數(shù)
剩余參數(shù)
在函數(shù)的形參中,還有剩余參數(shù)
這個(gè)東西,那如果具有剩余參數(shù)
,會(huì)是怎么算呢?
function fn1(name, ...args) {}
console.log(fn1.length) // 1
可以看出,剩余參數(shù)是不算進(jìn)length
的計(jì)算之中的
總結(jié)
總結(jié)之前,先公布123['toString'].length + 123 = ?
的答案是124
總結(jié)就是:length
是函數(shù)對(duì)象的一個(gè)屬性值,指該函數(shù)有多少個(gè)必須要傳入的參數(shù),即形參的個(gè)數(shù)。形參的數(shù)量不包括剩余參數(shù)個(gè)數(shù)
,僅包括第一個(gè)具有默認(rèn)值
之前的參數(shù)個(gè)數(shù)
該文章在 2024/6/19 17:39:43 編輯過