본문 바로가기

Backend/Javascript

[Javascript] - Function

Function (함수)

 

- function 연산자는 함수 객체를 만듭니다.

 

function 연산자는 매개변수 목록과 문장 블록으로 구성된 함수 몸체를 전달받습니다. 매개변수 각각의 이름 뒤에는 = 부호와 표현식이 올 수 있고, 인자로 전달되는 값이 undefined 라면 = 다음의 표현식 값이 초기와에 사용됩니다.

 

function make_set(array, value = true) { // value 에 전달된 값이 undefined 라면 true 로 초기화
   ...
}

 

함수 객체는 인자 목록과 함께 호출되는데 인자 목록에는 표현식이 없을 수도 있고 한 개 이상의 표현식이 있을 수도 있으며, 각각은 쉼표로 구분됩니다. 각 표현식은 계산된 뒤 함수의 매개변수에 지정됩니다.

 

매개변수보다 긴 인자들은 함수에서 무시되며, 빠진 인자는 undefined 값을 지정하게 됩니다.

 

- 확산연산자 (...) 는 인자 목록이나 매개변수 목록에서 사용할 수 있습니다.

 

확산 연산자를 인자 목록에서 쓰면 전개 (spread) 문이라고 부르며 배열을 받아 전개함으로써 배열의 각 요소가 구분된 인자처럼 전달되도록 해 줍니다.

 

function sum(a, b, c) {
  return a + b + c;
}

const numbers = [1, 2, 3];

const result = sum(...numbers); // -> 전개 (spread) 문

console.info(result); // 6

 

매개변수 목록에서 쓰면 나머지 (rest) 문이 됩니다. 인자의 나머지가 하나의 배열로 묶여서 해당 매개변수 이름과 연결됩니다. 함수는 나머지문을 써서 가변 인자를 처리할 수 있습니다.

 

function log(a, b, ...c) { // -> 나머지 (rest) 문
  console.info(a); // 1
  console.info(b); // 2
  console.info(c); // [3, 4, 5, 6]
}

log(1, 2, 3, 4, 5, 6);

 

- 함수가 호출되면 활성 객체가 만들어집니다.

 

활성 객체는 숨겨진 데이터 구조로서 호출된 함수의 반환 주소와 실행에 필요한 정보를 저장하고 이를 호출된 함수에 바인딩해 줍니다.

 

자바스크립트는 활성 객체를 다른 객체와 마찬가지로 힙에 저장합니다. 함수가 종료된다고 활성 객체를 자동으로 비활성화하진 않습니다. 활성 객체는 해당 객체에 대한 참조가 있는 한 계속 살아있으며 GC (가비지 컬렉터) 에 의해 처리됩니다.

 

- 활성 객체가 갖고 있는 정보

 

  • 함수 객체에 대한 참조
  • 함수를 호출한 측의 활성 객체에 대한 참조 (return 문이 실행 흐름을 함수 호출 측으로 돌릴 때 사용)
  • 함수 호출이 끝난 뒤 실행을 재개하기 위해 필요한 정보 (대개 함수 호출문 바로 다음 명령어의 주소)
  • 인자에 의해 초기화되는 함수 매개변수
  • undefined 로 초기화된 함수 변수들
  • 함수가 복잡한 표현식을 계산하기 위해 임시로 사용하는 변수들
  • 함수 객체가 메서드로서 호출되었을 때 사용할 수 있는 this 참조

 

- 함수 객체는 Function.prototype 에 대한 델리게이션 링크를 갖고 있습니다. 이 링크를 통해 함수 객체는 필요없는 메서드인 apply 와 call 을 상속받습니다.

 

델리게이션 링크란 어떤 객체가 처리할 수 없는 메시지 등을 다른 객체로 전달하기 위한 연결 정보를 의미합니다.

 

- 자유변수는 함수가 함수 바깥에 선언된 함수를 사용하는 것을 설명하기 위해 만들어진 말이며, 묶인 변수는 매개변수를 포함해 함수 내부에 선언된 변수를 설명하는 말입니다.

 

- 함수는 중첩될 수 있습니다.

 

함수 객체가 외부 함수에 대한 활성 객체의 참조를 갖는 방식을 클로저 (closure) 라고 합니다.

 

출처 : 자바스크립트는 왜 그 모양일까?

 

'Backend > Javascript' 카테고리의 다른 글

[Javascript] - Exception  (0) 2020.12.12
[Javascript] - Generator  (0) 2020.12.05
[Javascript] - Statement  (0) 2020.11.21
[Javascript] - Bottom value  (0) 2020.11.14
[Javascript] - String  (0) 2020.11.07