Jiyong's STUDY

Javascript의 함수 본문

Web/자바스크립트

Javascript의 함수

Kingjiyong 2021. 5. 26. 02:10

기본적으로, 자바스크립트의 함수는 객체이다. 이 부분은 다 알 것이라 생각한다.

 

1. 일급 함수

 

그리고 일급 객체이자 일급 함수이다.

여기서 '일급' 이라는 형용사는 값으로 다룰 수 있음을 나타낸다.

 

즉 '일급'의 조건은

- 변수에 담을 수 있다.

- 함수나 메서드의 인자로 넘길 수 있다.

- 함수나 메서드에서 리턴할 수 있다.

 

또한 자바스크립트에서 모든 값은 일급이다. 자바스크립트의 객체도 모두 일급 객체다.

 

그럼 일급 함수는 무엇인가? 추가적인 조건이 있다.

- 아무 때나(런타임에서도) 선언이 가능하다.

- 익명으로 선언할 수 있다.

- 익명으로 선언한 함수도 함수나 메서드의 인자로 넘길 수 있다.

 

자바스크립트의 함수는 위 조건을 모두 만족한다.

 

이제 '자바스크립트에서' 라는 전치사는 생략하겠다.

 

함수는 인자로 사용될 수 있다. 즉 인자로 받은 함수를 함수가 실행할 수 있고 리턴할 수 있다.

메서드를 가진 객체와는 다르게 자기 자신이 곧 기능인 함수는 쉽게 참조될 수 있고 전달될 수 있다.

 

2. 클로저

 

클로저는 중요하다. 특히 함수형 자바스크립트에서 중요하다. 정확히 이해해야만 한다.

또한 클로저를 이해하기 위해서는 스코프에 대한 개념이 필요하다.

 

스코프는 변수를 어디에서 어떻게 찾을지를 정한 규칙이다.

클로저에서 다루는 스코프는 함수 단위의 변수 참조에 대한 것이다.

 

함수는 변수 참조 범위를 결정하는 중요한 기준이다. 함수가 중첩되어 있다면 스코프들 역시 중첩되어 생겨난다.

중첩 스코프는 렉시컬 환경을 이해해야 알 수 있다.

 

실행 컨텍스트: {
  렉시컬 환경 컴포넌트: {
    렉시컬 환경: {
      환경 레코드: {
        선언적 환경 레코드: { // 글로벌 스코프에서는 오브젝트 환경 레코드
          // 현재 스코프에 선언된 변수와 함수들이 식별되어 있음
        }
      },
      외부 렉시컬 환경 참조 : 상위 스코프 참조
      // 글로벌 스코프에서는 상위 스코프가 없으므로 null 참조
    },
  },
  변수 환경 컴포넌트: {
    // 렉시컬 환경 컴포넌트에 설정된 '렉시컬 환경'을 복사한 것으로 렉시컬 환경 컴포넌트와 초기값이 같다.
    // 실행 단계에서 참조하는 것은 렉시컬 환경 컴포넌트이고, 변수 환경 컴포넌트는 이후 초기값으로의 환원을 위한 컴포넌트이다.
    // 함수가 호출될 때마다 매번 새로운 실행 컨텍스트를 생성하는 걸로 알고 있는데 캐시 개념이라도 적용되는 걸까... x같은 자스...
  },
  this바인딩 컴포넌트
  // 글로벌 스코프에서는 Global object참조
}

출처: https://velog.io/@woobuntu/실행-컨텍스트렉시컬-환경과-this

 

해당 글을 읽고 공부한 내용은 다른 글에서 다루도록 하겠습니다.

'Web > 자바스크립트' 카테고리의 다른 글

Javascript의 call, apply, bind  (0) 2021.06.29
Javascript의 this와 call  (0) 2021.06.28
Javascript의 Hoisting과 Scope  (0) 2021.06.28
클로저(Closure)란?  (0) 2021.06.24
Javascript의 실행 컨텍스트  (0) 2021.05.26