관리 메뉴

CASSIE'S BLOG

슈퍼코딩 16강 일급함수 + 클로저 정리 본문

PROGRAMMING/React

슈퍼코딩 16강 일급함수 + 클로저 정리

ITSCASSIE1107 2023. 10. 20. 07:18

자바스크립트 함수의 특징

 

프로그래밍 언어는 해당 언어의 함수들이 다른 변수처럼 다루어질 때 일급 함수를 가진다고 합니다


일급 함수 (first class function)

 

https://developer.mozilla.org/ko/docs/Glossary/First-class_Function

1. 자바스크립트는 함수를 일급시민 (first class citizen) 으로 다룸

2. 이 말은 곧, 함수를 단순한 값으로 본다는 것임

3. 함수는 객체 타입 중 하나

정리하면
함수를 값으로 취급하고, 인수로 전달하고 다른 함수에서 함수를 반환하는 기능이
있는 경우 프로그래밍 언어에서 일급함수가
있다고 말한다.

화살표함수도 자바스크립트가 함수를
일급시민으로 즉 값으로 인식하기
때문에 가능한거다.

a, b를 매개변수로 받아서 a+b로 리턴하는 함수를 우리가 addFunction이라는 변수 안에다가 넣어주고 있는데 원래 변수에는 값을 넣어야죠?

const addFunction = (a,b) => a+b;

객체안의 메소드에도 함수표현식을 넣을 수 있는데 object는 key, value형태로 이루어져있는데 value부분에 함수를 넣었다라고 뷰면 된데

리액트 들어가게되면 많이 쓰게될 addEventListener

button object 즉 element 안에 addEventListener라는 함수를 넣어서

이 코드가 클릭 이벤트에 우리가 listener를 추가하겠다 이런 코드래

button.addEventListner(‘click’, () => console.log(‘click’));

이것도 함수안에 함수 넣은거다.
addEventListner안에 console.log 넣은거임

함수를 받거나 함수를 리턴하는게 가능한데
이게 고차함수라서 그런거임

클로저
모든 함수는 그 함수가 만들어지는 시점의 실행컨텍스트를 기억하여, (해당 실행 컨텍스트가 없더라도) 그 환경 변수에 접근할 수 있다.

함수가 리턴되면 실행컨텍스트가 콜스택에서 빠진다.  그러고 나면 스코프에서 나감

클로저는 함수가 만들어지는 시점의 변수들 간 연결을 끊어지지 않게 해주는 장치이다.






 

일급 함수 - MDN Web Docs 용어 사전: 웹 용어 정의 | MDN

프로그래밍 언어는 해당 언어의 함수들이 다른 변수처럼 다루어질 때 일급 함수를 가진다고 합니다. 예를 들어, 일급 함수를 가진 언어에서 함수는 다른 함수들에 전달인자로 제공되고, 다른 함

developer.mozilla.org

 

원래는 전역함수를 줄여가면서 코드를 짜야함. 실수로라도 접근할 수 있기 때문임.

 

잘 정리해주셨다. 

 

 

https://velog.io/@proshy/JS%ED%81%B4%EB%A1%9C%EC%A0%B8closure%EC%99%80-%ED%81%B4%EB%A1%9C%EC%A0%B8%EC%9D%98-%EC%82%AC%EC%9A%A9-%EC%98%88%EC%A0%9C

 

[JS]클로져(closure)와 클로져의 사용 예제

클로저란? MDN에서는 closure를 이와 같이 정의한다. > "A closure is the combination of a function bundled together (enclosed) with references to its surrounding state

velog.io

 

 

클로저 : 

 

 

보통 return 으로 함수 정의해서 클로저를 사용한다. 

익명 함수로 클로저를 정의하는 것은 일반적이지만, 이름이 있는 함수로도 클로저를 만들 수 있습니다. 다음은 두 가지 예제입니다.

 

반응형

'PROGRAMMING > React' 카테고리의 다른 글

컴포넌트와 엘리먼트의 차이  (1) 2023.10.21
[슈퍼코딩] 18강 JAVASCRIPT XML (JSX)복습  (0) 2023.10.20
node js vs npm  (0) 2023.10.14
리액트 배포일지  (0) 2023.10.13
테이블 로딩  (0) 2023.10.13