[TIL/JavaScript] 2023/06/17
함수 선언문함수를 정의하는 방식 중 함수 선언문(Function declaration) 방식이 있다. 기본적인 syntax는 다음과 같다.다음은 함수 선언문 방식의 특징이다.함수 선언문은 function 키워드를 사용한다.함수 선언문 방식으로 함수를 정의할 때, 함수명
함수 선언문
함수를 정의하는 방식 중 ``함수 선언문(Function declaration)`` 방식이 있다. 기본적인 syntax는 다음과 같다.
function functionName(parameters) {
// 함수의 동작 코드
}
다음은 함수 선언문 방식의 특징이다.
1. 함수 선언문은 ``function 키워드``를 사용한다. 2. 함수 선언문 방식으로 함수를 정의할 때, ``함수명은 생략할 수 없다``. 3. 함수 선언문 방식으로 함수를 정의하면, runtime 이전에 자바스크립트 엔진에 의해 함수 객체가 먼저 생성된다.(=``함수 호이스팅`` 현상이 발생한다.)
cf>
1. ``함수 표현식`으로 함수를 정의하면 함수 호이스팅이 아니라 `변수 호이스팅``이 발생한다. 2. 함수 호이스팅은 함수를 호출하기 전에 반드시 함수를 선언해야 한다는 당연한 규칙을 무시하기에, 함수 선언문 대신 ``함수 표현식을 사용할 것이 권장``된다.
재귀 함수
함수가 자기 자신을 호출하는 것을 ``재귀 호출(recursive call)`이라 하고, 재귀 호출을 수행하는 함수가 바로 `재귀 함수``이다. '함수명'과 '함수를 가리키는 식별자', 둘 다 재귀 호출을 가능하게 한다는 특징이 있다.


익명 함수일 때에도 가능하다.

고차함수 & 일급함수
함수의 매개변수를 통해 다른 함수의 '내부로 전달되는' 함수를, ``콜백 함수 또는 일급 함수``라고 한다. 한편, 매개변수를 통해 함수의 외부에서 '콜백 함수를 전달받은' 함수를 고차 함수라고 한다.

일급의 조건
1. 변수나 데이터에 담을 수 있어야 한다. 2. 함수의 파라미터로 전달할 수 있어야 한다. 3. 함수의 리턴값으로 사용할 수 있어야 한다.
렉시컬 스코프
함수를 어디에서 ``정의(호출 x)`했는지에 따라 함수의 상위 스코프가 결정된다는 입장이, `정적 스코프(static scope) 또는 렉시컬 스코프(lexical scope)``이다.
따라서, 특정 렉시컬 스코프의 상위 스코프는 언제나 자신이 정의된 스코프이다.
클로저
MDN에서는 클로저를 다음과 같이 정의하고 있다.
“A closure is the combination of a function and the lexical environment within which that function was declared.”
클로저는 '함수'와 '그 함수가 선언됐을 때의 렉시컬 환경(Lexical environment)'과의 조합이다.

위 코드에서 outerFn 함수는, innerFn 함수를 정의하고 innerFn 함수를 반환한다. innerFn 함수 내부에서는 x라는 변수를 사용하고 있는데, 여기서 x는 outerFn 함수 내부에 정의된 지역 변수이다.
outerFn 함수가 실행되면 x에 10이 할당되고, innerFn 함수를 반환한다. 이후 inner 변수에, 반환된 innerFn 함수가 할당된다.
inner 함수를 실행하면 innerFn 함수가 실행되며, x 변수의 값을 출력한다. 이때, x 변수는 outerFn 함수의 실행이 끝났음에도 불구하고 접근할 수 있는데, 이것이 바로 클로저의 동작 원리이다.
다시 MDN의 정의를 살펴보면, '함수'는 반환된 innerFn 함수를 의미하고, '그 함수가 선언될 때의 렉시컬 환경'이란 innerFn이 선언됐을 때의 스코프를 의미한다.
=>한마디로, 클로저는 자신이 생성될 때의 환경을 기억하는 함수다.
More to read
프론트엔드와 백엔드 사이
HTTP 상태 코드는 프론트엔드에서 백엔드로 보냈던 요청의 수행 결과를 의미하는 일종의 약속이며, API를 구성하는 핵심 요소 중 하나입니다. 상태 코드와 관련하여, 백엔드는 잘 모르는 프론트엔드의 슬픈 사정이 있습니다.아래는 요청이 실패했음에도, 백엔드에서 상태 코드
JWT토큰 관리 방식 톺아보기
0. 들어가며 🎯 서비스에 접근하려는 사용자가 누구인지 확인하는 과정을 사용자 인증이라고 합니다. 인증된 사용자에게 주어진 권한을 확인하는 작업은 인가라고 부릅니다. 이번 글에서는 인가는 다루지 않습니다. 사용자 인증에는 많은 방식이 있지만, 오늘은 세션 인증 방
A2AA2A / MCP 멀티 에이전트 오케스트레이션
0. 들어가며 ✍️ Google for Developers에, 레스토랑 공급망 시나리오로 엮은 6대 프로토콜(MCP, A2A, UCP, AP2, A2UI, AG-UI)에 대한 가이드가 게시된 이후, MCP와 A2A부터 구현해 보는 것이 좋을 것 같다는 생각이 들었습니