- Published on
面試題:閉包
前言
也是面試遇到的題目,懂原理也會寫,但花有點多時間也有點醜。
思路與答案
題目:
建立一個函式使輸出如下:
console.log(argsCount()) // 0
console.log(argsCount(2)()) // 1
console.log(argsCount(3)(4)()) // 2
console.log(argsCount(5, 6, 7)()) // 3
console.log(argsCount(1)(2, 3)(4)()) // 4
console.log(argsCount(1)) // function
console.log(argsCount(1)(2, 3)(4)) // function
首先看到多個 (),就必然是 return 一個 function,閱讀題目得知輸出有幾種:
1.若執行時沒有參數,則輸出曾經出現過的參數數量。
2.如果參數中有出現過 1,則 return function 。
3.如果以上情況都不存在,則 return function 。
使用 ...args 統計未知的參數數目,如果是 0 , 則 early return 0 。
利用 args 傳入 countArguments function 導致會被記憶起來的特性儲存 args 。
最後把條件全部寫上去就大功告成。
function argsCount(...args) {
if (args.length === 0) return 0
function countArguments(...newArgs) {
if (newArgs.length === 0) return args.length
if (newArgs.includes(1)) return countArguments
args.push(...newArgs)
return countArguments
}
return countArguments
}