*begining functional javascript -(에이콘 출판사)를 읽고 공부한 내용을 바탕으로 작성한 글입니다.
자바스크립트에서 클로저(closure)란 함수 안의 함수이다.
아래의 outer 함수와 같은 형태가 바로 클로저이다.
const outer = () => {
const inner = () => {}
return inner
}
이러한 형태의 함수 이름이 closure인 이유는 함수가 처음 실행 될 당시의 스코프를 포섭(closure)하여 이후에 실행할때 이용하기 때문이다.
const outer = (num) => {
const inner = (num) => {console.log(num)}
return inner
}
const example = outer(4)
example()
위의 코드에서 example()를 실행 시키면, 콘솔창에 4가 찍히게 된다.
이것이 바로 closure라는 이름이 붙은 이유이다.
이를 조금 더 응용하면 클로저를 활용해서 private method를 흉내 낼 수 있다.
const Calculator = () => {
let num = 0;
const Plus = () => {num+=1;}
const Minus = () => {num-=1;}
const LogNumber = () => {console.log(num)}
return {
Plus,
Minus,
LogNumber
}
}
const c = Calculator()
c.LogNumber()
c.Plus()
c.LogNumber()
주어진 함수를 한 번만 실행할 때 사용할 수 있는 once 함수
const once = (fn) => {
let done = false;
return ()=>(done ? undefined : ((donw = true), fn.apply(this, arguments))
}
apply, call 과 같은 함수에 대한 이해를 하느라 꽤 헤맸는데, 좋은 글을 찾아 공유합니다.
https://www.zerocho.com/category/JavaScript/post/57433645a48729787807c3fd
* 다음에 정리할 것 apply, call, bind
* Object.entries 함수 -> 메서드는 for...in와 같은 순서로 주어진 객체 자체의 enumerable 속성 [key, value] 쌍의 배열을 반환합니다. (for-in 루프가 다른점은 프로토 타입 체인의 속성도 열거한다는 점입니다). from Mdn
'프로그래밍 > javascript' 카테고리의 다른 글
begining functional javascript 8장ㅇ=0 함수자 (0) | 2022.02.09 |
---|---|
javascript의 this 그리고 [call,bind,apply] 함수 (0) | 2022.02.02 |
begining functional javascript (0) | 2022.01.19 |
[react] clean-up function에 대한 이해 (0) | 2021.10.24 |
[TYPE SCRIPT] MAP 함수 오류 (해결책) (0) | 2021.08.25 |