⏰
2024/4/21 leetcode challenge 1day [Counter]
やった問題
私の回答
function createCounter(n: number): () => number {
let amount = 0
let count = 0
return function() {
if(count === 0){
amount += n
count += 1
return n
}else{
count += 1
return amount += 1
}
}
}
学び
closures
- https://typescript-jp.gitbook.io/deep-dive/recap/closure
- 関数(外部関数)の中に関数(内部関数)を持つこと。
- 内部関数は外部関数のスコープにアクセスできる
- 例
- https://www.r-staffing.co.jp/engineer/entry/20221021_1
- 関数の引数を関数にしたいときに便利。
playgroundで試してみた
var createCounter = function(n: number) {
let currentCount = n - 1;
console.log('1回目',n)
console.log('2回目',currentCount)
return function() {
console.log('3回目',currentCount)
currentCount += 1;
return currentCount;
};
};
const counter = createCounter(10)
console.log(counter())
console.log(counter())
console.log(counter())
-
出力結果
[LOG]: "1回目", 10
[LOG]: "2回目", 9
[LOG]: "3回目", 9
[LOG]: 10
[LOG]: "3回目", 10
[LOG]: 11
[LOG]: "3回目", 11
[LOG]: 12 -
わかること
- 外部関数は最初の1しか呼ばれてない。
- 内部関数は3回呼ばれている。
知らなかった
x++;
- インクリメント演算子はインクリメントした上で、インクリメント前の値を返す。
++x;
- インクリメント演算子はインクリメントした上で、インクリメント後の値を返す。
Discussion