inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[React / VanillaJS] UI 요소 직접 만들기 Part 1

아코디언 1/6 강좌 클로져 관련 질문입니다.

해결된 질문

380

호갱

작성한 질문수 20

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 매개변수를 사용하여 동작을 수행합니다.

react typescript dom ui vanilla-js

답변 1

3

정재남

이 자리에서 클로저의 정의를 자세히 설명해 드리는건 수업의 범위에서 많이 벗어납니다.
하여, 여기서는 질문하신 내용에 대한 최소한의 이해를 돕는 정도로만 소개드려 보도록 하겠습니다.

 

MDN에서는 클로저를 다음과 같이 소개하고 있습니다.

image

이 중 '외부함수'와 '내부함수'의 관계를 클로저라고 하며, 흔히 외부함수에서 선언된 변수나 인자를 내부함수가 참조하는 경우를 일컫습니다.

 

예로, 다음 함수 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가 반환될 것입니다.

 

이보다 자세한 내용은 자바스크립트 이론서나 이론강의 등을 통해 학습하시기 바랍니다.

강의 난이도에대해서

0

104

1

강의자료 관련 질문

0

64

2

게시판 리스트 만들때 어디부터 use client를 적용할 지 모르겠어요

0

135

1

강의 연장관련

0

174

2

Tooltip-useSyncExternalStore()에 함수 넘기는 방식에 대해...

0

222

3

textarea 에서 body 무한깜빡현성 질문 드립니다.

0

132

2

닫힌 상태에서 문자열은 찾아지는데 열리진 않아요

0

146

2

scrollSpy 바닐라버전에서 data-index를 찾는 코드 질문

0

128

2

[#보일러플레이트 코드 사용법 문의] 강의자료[보일러플레이트] 사용법에 대해서 문의 드려요

0

318

2

무한스크롤 리액트버전 | 16분 31초

0

176

2

강의자료 github link 404 빈페이지

0

263

2

아코디언 (3/6) css transition 추가 부분 max-height 질문

1

417

2

강의 정리에 대한 블로그 정리 글 게시 문의

0

301

1

[아코디언 1/6 챕터] 클로저 활용 질문 있습니다.

2

444

2

item7 style이 강의자료에 없습니다.

0

291

1

이벤트 핸들러가 Root에 모이면

0

304

1

append와 insertAdjacentElement 차이가 무엇일까요?

0

324

1

gnb 만들기를 실무 next js 프로젝트에서 사용할수 있나요?

1

614

2

학습자료 관련해서 질문있습니다.

0

550

1

무한스크롤 강의 관련 질문입니다.

0

311

1

반응형 TextBox 질문입니다.

0

478

1

Tooltip의 useStyleInView 훅 질문입니다.

0

253

1

이벤트에 대한 타입을 지정할 때 궁금한 점이 있습니다.

0

313

1

gnb 를 이렇게 수정해 봤어여

0

640

1