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

Sunshine_Lin發表於2021-12-30

前言

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

為什麼

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

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

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

到底是多少?

形參個數

我們們來看看下面這個例子

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有多少個形參,length就是多少。但是事實真是這樣嗎?繼續往下看

預設引數

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

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

說明了,functionlength,就是第一個具有預設值之前的引數個數

剩餘引數

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

function fn1(name, ...args) {}

console.log(fn1.length) // 1

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

總結

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

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

結語

我是林三心,一個熱心的前端菜鳥程式設計師。如果你上進,喜歡前端,想學習前端,那我們們可以交朋友,一起摸魚哈哈,摸魚群,加我請備註【思否】

image.png

相關文章