[F-Lab 모각코 챌린지 - 51일차] - 커링 함수, 호이스팅, 제너레이터(1)

Big One·2023년 6월 30일
0

F-Lab

목록 보기
24/69

커링 함수

커링 함수란 여러개의 인자를 받는 함수를 하나의 인자만 받는 함수로 나눠서 순차적으로 호출 될 수 있게 체인 형태로 구성한 것이다.

특징

중간 과정상의 함수를 실행관 결과는 그 다음 인자를 받기 위해 대기만 할 뿐, 마지막 인자가 전달되기 전까지 원본 함수가 실행되지 않는다.

const curry3 = function (func) {
	return function(a){
		return function(b){
			return func(a, b);
		};
	};
};

const getMaxWith10 = curry(Math.max)(10); // func에 Math.max, b에 10 이 들어간 상황
console.log(getMaxWith10(8)); // b 에 8 이 들어가서 Math.max(10, 8) 의 결과값이 반환됨

커링 함수는 필요한 상황에 만들어 쓰기 용이하다. 다만 인자가 많으면 가독성이 떨어지는 단점이 있는데 화살표 함수를 사용하면 된다!!

const curry5 = func => a => b => c => d => e => func(a, b, c, d, e);

커링 함수는 마지막 호출로 실행 컨텍스트가 종료된 후에야 한 꺼번에 GC 수거 대상이 된다.

당장 필요한 정보만 받아서 전달하고 또 필요한 정보가 들어오면 전달하는 식으로 하면 결국 마지막 인자가 넘어갈 때까지 함수 실행을 미루는 셈이다. 이를 함수형 프로그래밍에서 지연실행 이라고 한다.

호이스팅이란?

함수와 변수의 선언을 코드의 최상단으로 끌어올리는 동작을 의미한다. 이로써 해당 스코프에서 사용가능하게 된다.

변수의 호이스팅

var로 선언된 변수의 경우 변수만 끌어올려져 undefined로 초기화 된다. 이후 코드의 실행으로 해당 코드가 실행될 때 할당이 완료된다.

함수의 호이스팅

함수 선언문으로 작성된 함수의 경우 함수 전체가 끌어올려지기때문에 함수를 선언하기 이전에 사용할 수 있다.

제너레이터 함수

제너레이터 함수란 순회 가능한 이터레이터 객체이다.

제너레이터는 빠져나갔다가 나중에 다시 돌아올 수 있는 함수이다. 이때 컨텍스트(변수의 값)는 출입 과정에서 저장된 상태로 남아있다. 제너레이터는 호출되어도 즉시 실행하지않고, Iterator객체가 반환된다.
Iterator의 next() 메서드를 호출하면 제너레이터 함수가 실행되어 yield 문을 만날때까지 진행하고 해당 표현식이 명시하는 Iterator로 부터의 반환값을 반환한다.

사용법

function* infinite() {
  let index = 0;

  while (true) {
    yield index++;
  }
}

const generator = infinite(); // "Generator { }"

console.log(generator.next().value); // 0
console.log(generator.next().value); // 1
console.log(generator.next().value); // 2
// ...

yield

제너레이터 함수를 중지하거나 재개하는데 사용된다.

[rv] = yield [expression];

yield는 iteratorResult인 value, done을 가지고 있다

expression

제너레이터 함수에서 제너레이터 프로토콜을 통해 반환할 값

rv

제너레이터 실행을 재개하기 위해서 optional value를 제너레이터의 next()메서드로 전달하여 반환한다.

profile
이번생은 개발자

0개의 댓글