Given an integer n, return a counter function. This counter function initially returns n and then returns 1 more than the previous value every subsequent time it is called (n, n + 1, n + 2, etc).
給予一個整數 n,回傳一個計數的函式。 這個計數函式在最初的時候回傳 n,並在後續調用時回傳 (n、n + 1、n + 2),然後每次返回都比前一個值多 1 的值。
Example 1:
Input: n = 10 ["call","call","call"] Output: [10,11,12]
Example 2:
Input: n = -2 ["call","call","call","call","call"] Output: [-2,-1,0,1,2]
solution:
首先要注意題目給予的函式運用了閉包(closure)的概念,在計數的部分可以運用後置遞增運算符 n++ 來做運算,
遞增運算符 ++ 的作用是將操作數的值增加 1,並返回遞增後的值。但在這種情況下,n++ 實際上是將 n 的值返回,然後才將 n 的值增加 1。
當首次調用 counter() 時,n 的初始值是 10。因此,它會返回當前的值 10,然後將 n 的值增加 1,變成 11。
接下來,當再次調用 counter() 時,n 的值已經是 11。這時,它會返回 11,然後將 n 的值增加 1,變成 12。
每次調用 counter() 都會先返回 n 的值,然後將 n 的值增加 1,這樣就實現了遞增的效果(n、n+1、n+2)。
ex. Closure(閉包) : 在函式中須參照外部參數的行為,可以透過閉包的特性來運用 private 變數到 function 中。
let b = 0.9 function multiply(a) { return a * b } console.log(multiply(10)) //9
Code 1: BigO(1)
var createCounter = function(n) { return function() { return n++ }; };
FlowChart:
Example 1
const counter = createCounter(10) counter() // 10 counter() // 11 counter() // 12
Example 2
const counter = createCounter(-2) counter() // -2 counter() // -1 counter() // 0 counter() // 1 counter() // 2
ex. Closure => Curring