함수란 -입력을 받아 출력을 하는 과정을 말한다. 

 

함수의 구성 - 함수이름, 매개변수, 함수몸체, 반환값, 인수로 구성된다.

 

함수의 생성과 실행 - 생성은 정의를 통해 이루어지고 실행은 호출로 이루어진다.

 

함수를 쓰는 이유 - 함수는 재사용하기 매우 편리하다. 그런 측면에서 신뢰성이 높아진다.

함수는 객체이므로 식별자로 표현하고, 식별자 덕분에 의미를 알기 쉽다.

 

함수 리터럴 - 함수이름은 식별자 명명법을 따라야한다 그리고 생략가능하다, 함수 선언문 제외

함수이름은 함수 몸체 내에서만 참조 가능하다.

매개변수 역시 식별자 명명법을 따라야 한다 그리고 매개변수도 없어도 상관없다

 

함수 정의 방법 4가지

 

함수 선언문

함수 표현식 

생성자 함수

화살표 함수

 

함수 선언문의 특징 

 

1. 함수이름과 식별자 - 함수이름은 함수내에서만 참조 가능하다. 그런데 호출이 가능한 이유는

언어차원에서 암묵적으로 함수이름으로 식별자를 만들기 때문이다. 그렇기 때문에 다른 정의법과 다르게

선언문은 이름을 생략해선 안된다.

 

2.문맥에 따라 선언문과, 표현문으로 분별한다. 

선언문은 변수에 할당되지 않지만 표현문을 보면 아닌 것 같다. 그 이유는 JS가 문맥에 따라 다르게 이해하기 때문이다.

선언문이 만약 피연산자가 된다면 표현문으로 본다. 피연산자는 값이어야 가능하므로

 

함수 표현식의 특징

 

1.일급객체이다. 일급 객체는 값으로 표현되는 객체이다. 함수는 값이자 객체이므로 일급객체다

 

2. 선언문과 표현식의 호이스팅 차이 

선언문은 호이스팅 돼서 선언 전에 호출 되더라도 값이 나온다. 표현식 역시 호스팅 되지만 var 변수 호스팅과 같이

undefined로 먼저 호이스팅 되고 표현식을 만나 객체가 할당되므로 차이가 있다.

 

다른 정의문 생성자 함수와 화살표 함수는 뒤에가서 자세히 배운다.

 

함수 인수

 

1. 함수 인수 숫자를 다르게 넣었을 때 

함수 인수를 많이 넣는다면 초과분은 무시하고 적게 넣는다면 add(2, undefined) NaN을 출력한다.

 

2.인수 확인 작업 

JS의 선언 키워드는 타입 가리지 않고 받을 수 있다. 그래서 함수의 기대와 다른 타입을 받을 수 있으므로 확인작업이

필요하다.

 

3.인수를 받는 매개변수 역시 변수다.

인수를 받기 전 호이스팅 되어 undefined를 받고, 함수스코프이다. 

 

return 반환문

 

1.문을 끝내고 값을 반환하는 특징을 가졌다.

 

2. 생략가능하다. 다만 undefine값이 출력된다.

 

 

여러가지 함수

 

1. 즉시 실행 함수 

 

그룹연산자로 묶어서 만든다. 함수리터럴이 되어서 식별자가 없다. 1회 실행된 뒤 호출 불가능이다.

함수이름이 없는 것이 일반적이다. 그룹연산자가 없다면 함수이름이 없어서 에러가 나고, 이름이 있다면

선언문이 되어 자동으로 } 끝에 세미클론이 생겨 () 그룹연산자에 값이 없어 에러가 난다.

일반적으로 그룹연산자로 만드는데 함수리터럴로 평가해서 함수객체를 만들수만 있다면 다른식으로도 가능하다

 

2.재귀함수 

 

함수가 자신을 호출하는 형태 작성자가 원하는 만큼 반복하고 싶을 때 쓴다.

 

3. 고차함수, 콜백함수 

 

함수가 다른 함수를 인수로 받는 경우다. 외부에서 다른 함수를 전달받는 함수를 고차함수,

인수로 다른 함수에 전달되는 함수를 콜백함수라 부른다. 콜백함수가 고차함수에서만 호출된다면 

즉시 실행함수로 일반적으로 구성한다.

 

4.순수, 비순수함수

 

순수함수는 외부환경에 의존하거나 변경하지도 않는 불변성을 지는 함수를 말한다.

비순수 함수는 외부환경에 의존하고 변경되는 함수를 말한다.

 

5. 중첩함수 

 

함수 내부에 정의된 함수로 중첩함수 또는 내부함수로 부른다. 일반적으로 내부함수는 외부함수를 돕는

헬퍼 함수이다. 

 

 

 

 

+ Recent posts