해결된 질문
작성
·
288
0
안녕하세요 선생님 고급강의 잘보고 있습니다.
잘만들어 주셔서 감사합니다.
아코디언 만들기 1/6 을 보다가 궁금한 사항이 있어 질문드립니다.
const toggleItem = (id: string) => () => {
setCurrent((prev) => (prev === id ? null : id))
}
아코디언 1/6 강의를 듣다가 가운데 () 가 클로져 라고 하셨는데
가운데에 저렇게 () 를 쓰면 클로져가 되는건가요?
( 제가 프론트엔드 개발자가 아니라서 클로져의 장단점을 몰라서 질문을 드리는것 같습니다. )
chatgpt 에게 질문을 남겼는데 더욱 이해가 안되어서 질문드렸습니다..ㅎㅎ
아래는 gpt의 답변 입니다.
여기서 (id: string) => () => {...}는 두 개의 함수를 연속적으로 정의하고 있습니다.
1.외부 함수: (id: string) => {...} 이 함수는 id라는 문자열을 매개변수로 받습니다.
내부에는 또 다른 함수를 반환하고 있습니다.
2. 내부 함수: () => {...} 외부 함수가 반환하는 내부 함수입니다.
외부 함수의 id 매개변수를 사용하여 동작을 수행합니다.
답변 1
3
이 자리에서 클로저의 정의를 자세히 설명해 드리는건 수업의 범위에서 많이 벗어납니다.
하여, 여기서는 질문하신 내용에 대한 최소한의 이해를 돕는 정도로만 소개드려 보도록 하겠습니다.
MDN에서는 클로저를 다음과 같이 소개하고 있습니다.
이 중 '외부함수'와 '내부함수'의 관계를 클로저라고 하며, 흔히 외부함수에서 선언된 변수나 인자를 내부함수가 참조하는 경우를 일컫습니다.
예로, 다음 함수 originalFunc
는
const originalFunc = (id: string) => () => { console.log(id) }
풀어쓰면 다음과 같습니다.
const orginalFunc = (id: string) => {
return () => {
console.log(id)
}
}
위 코드는 다음과 동작상에 차이가 없습니다.
const orginalFunc = (id: string) => {
const innerFunc = () => {
console.log(id)
}
return innerFunc
}
이 상태에서 보면, 내부함수인 innerFunc
에서 originalFunc
의 인자 id
를 참조하고 있습니다.
이는 클로저 현상을 활용한 대표적인 사례에 해당합니다.
이후 어디선가 originalFunc('abc')
를 실행하면 함수 자체가 반환될 뿐이지만,
이 반환된 함수를 변수 a
에 담아 다시 호출하면 ( a()
) 그 결과로 abc
가 반환될 것입니다.
이보다 자세한 내용은 자바스크립트 이론서나 이론강의 등을 통해 학습하시기 바랍니다.