當前位置: 妍妍網 > 碼農

95%的人都回答不上來的問題:函式的length是多少?

2024-03-18碼農

前言

大家好,我是林三心,我今天給大家講講 function length ,到底是怎麽算的。希望大家能從中學到東西,並且可以鞏固一下基礎。

為什麽

為什麽我會想到這個知識點呢?因為昨晚,在一個群裏,有一位同學在討論一道字節跳動的面試題

123['toString'].length + 123 = ?

說實話這道題,我一開始也沒答出來。其實我是知道,面試官想考 Number 原型上的 toString 方法,但是我卡在了 toString函式的length是多少 這個難題上。所以才有了今天這篇文章

到底是多少?

形參個數

咱們來看看下面這個例子

functionfn1 () {}
functionfn2 (name{}
functionfn3 (name, age{}
console.log(fn1.length) // 0
console.log(fn2.length) // 1
console.log(fn3.length) // 2

可以看出, function 有多少個形參, length 就是多少。但是事實真是這樣嗎?繼續往下看

預設參數

如果有預設參數的話,函式的 length 會是多少呢?

functionfn1 (name{}
functionfn2 (name = '林三心'{}
functionfn3 (name, age = 22{}
functionfn4 (name, age = 22, gender{}
functionfn5(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 ,就是 第一個具有預設值之前的參數個數

剩余參數

在函式的形參中,還有 剩余參數 這個東西,那如果具有 剩余參數 ,會是怎麽算呢?

functionfn1(name, ...args{}
console.log(fn1.length) // 1

可以看出,剩余參數是不算進 length 的計算之中的

總結

總結之前,先公布 123['toString'].length + 123 = ? 的答案是 124

總結就是: length 是函式物件的一個內容值,指該函式有多少個必須要傳入的參數,即形參的個數。形參的數量不包括剩余 參數個數 ,僅包括 第一個具有預設值 之前的參數個數

結語

如果你覺得此文對你有一丁點幫助,點個贊,鼓勵一下林三心哈哈。