FE BE 개발 메모장/Javascript

함수와 고차함수

함수는  하나의 특별한 목적의 작업을 수행하도록 설계된 독립적인 블록을 의미한다. 

자바스크립트에서의 함수는 하나의 데이터 타입(data type)으로, 변수를 대입한다거나, 함수에 프로퍼티를 지정하는 것도 가능하다. 또한 여러번 중첩하여 고차함수로 활용할 수 있다. 

함수의 정의

1. 함수이름 

  함수이름은 함수 내부 코드에서 자신을 재귀적으로 호출하거나, 해당 함수를 구분하는 식별자로 사용한다.

 

2. 괄호 안에 쉼표( , )로 구분되는 함수의 매개변수(parameter)

  함수의 정의에서 전달받은 인수를 함수 내부로 전달하기 우해 사용하는 변수

3. 중괄호 { } 안에서 함수를 정의하는 자바스크립트 구문

  -실행문

  -반환문 return[option]반환문을 통해 함수의 실행된 결과를 전달받는다. 배열이나 객체를 포함한 모든 타입의 값을  반환할 수 있다.

 

함수 선언식 - Function Declarations

//일반 함수
function double(a, b){
  return a * b
}

//double()함수가 실행되고 변수 result에 담긴다.
let result = double(5,10) = 50;

함수 표현식 - Function Expressions

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

//[ES-6]

const func = (a, b) => a * b;

Function 생성자 함수

객체 리터럴{ ...statement }를 사용하면 객체를 쉽게 만들 듯이, new연산자를 통해 새로운 객체(Fucntion)를 생성할 수 있다. 

생성자 함수의 필요성은 다음과 같다.

  • 여러개의 동일한 프로퍼티를 가지는 객체를 생성하기 위해 필요하다.
  • Prototype을 이용하여 메모리 절감을 위해 필요하다.

생성자 함수 규칙

1. 함수 이름의 첫 글자는 반드시 대문자.

2. 함수 이름 앞에 new 연산자를 붙여서 호출한다. 

const newFunc = new Func('a', 'b', 'return a + b')

혹은 

function Func(chat, old) { //괄호안에 parameter을 넣어줄수 있음.
    this.chat(함수의 Property)
    this.old
}

const myFunc = new Func() //괄호안에 arguments을 넣어줄수 있음.

함수의 유효 범휘(Function Scope)

자바스크립트는 함수를 블록 대신 사용한다. 자바스크립트에서 함수는 자신이 정의된 범위 안에서 정의된 모든 변수 및 함수에 접근할 수 있다.

const newFunc = new Func(a, b)

전역 함수 : 모든 전역변수와 전역 함수에 접근할 수 있다.

내부 함수 : 어떤 함수 내에 정의된 함수는 부모함수에서 정의된 모든 변수와 부모 함수가 접근할 수 있는 모든 다른 변수 까지 접근이 가능하다. 

 

커링

함수 하나가 n개의 인자대신, n개의 함수를 만들어 각각 인자를 받게 하는 방법

function adder(x) {
  return function(y) {
    return x + y
  }
}

adder(2)(3); //5

adder의 매개변수 x의 값을 고정 해놓고 재사용할 수 있다.

let add10 = adder(10);
add10(2); // 12

let add5 = adder(5);
add5(5);  // 10

 

클로저 모듈 패턴 

변수를 스코프 안쪽에 가두오 함수 밖으로 노출 시키지 않는 방법.

function makeCounter() {
 let counter = 0;
 
 return  {
   increment: function() {
	 counter++;
   },
   decrement: function() {
     counter--;
   },
   getValue: function() {
     return counter; 
  }
 }
}

고차함수 (higher order function)는 함수를 인자(argument)로 받거나 함수를 리턴하는 함수를 말한다.