Programming/JavaScript

[JavaScript] 함수와 함수 메서드, 클로저

dev seon 2023. 11. 27. 17:29

디폴트 매개변수

 

ES5에서는 디폴트 값을 설정할 때 함수 안에 아래와 같은 방식을 사용하였습니다.

  numPassengers = numPassengers || 1;
  price = price || 100;

 

그러나 ES6에서는 함수의 매개변수에 바로 디폴트 값을 설정할 수 있습니다.

const createBooking = function(flightNum,
  numPassengers = 1,
  price = 199)

 

함수를 사용할 때 매개변수를 건너뛰고 입력할 수는 없습니다.

만약 1, 3번째 매개변수만 입력하고 싶다면 2번째 매개변수 위치에 undefined를 입력하면 됩니다.

 

퍼스트 클래스 함수, 고차원 함수

함수를 변수나 개체 속성에 저장할 수 있습니다.

함수를 다른 함수에 대한 인수로 넘길 수도 있습니다.

또 함수에서 함수를 반환할 수도 있습니다.

 

함수는 하나의 개체입니다.

개체는 메서드를 가지고 있듯이 함수에도 메서드가 있습니다.

 

자바스크립트에는 퍼스트클래스 함수가 있어서 고차원 함수를 이용할 수 있습니다.

다른 함수를 인수로 받거나 새 함수를 반환하는 함수를 고차원 함수라고 합니다.

 

 

Call과 Apply, Bind 메서드

call과 apply는 매개변수로 사용될 값과 호출할 함수의 매개변수들을 받습니다.

호출할 함수의 매개변수를 배열로 담을 경우 apply를 쓰고 아닌 경우는 call을 씁니다.

bind 메서드는 함수 호출을 하지 않는다는 차이점이 있습니다.

 

IIFE

IIFE는 immediately invoked function expressions입니다.

함수를 즉시 실행하기 위해 함수식을 어떤 변수에도 할당하지 않고 작성합니다.

함수명을 입력하지 않은 채로 전체 함수표현식을 괄호로 묶고

뒤에 괄호를 붙이면 에러 없이 실행할 수 있습니다.

(function () {
	console.log('hello');
})();

 

이건 화살표 함수로도 사용할 수 있습니다.

(() => console.log('hello'))();

 

Clousure

어떤 함수가 생성된 실행 컨텍스트가 생성된 뒤에도 그 실행 컨텍스트가 사라진 경우입니다.

즉, 부모 기능의 모든 변수에 접근하게 해주는 기능입니다.