자바스크립트 기초문법6 -사용자정의 함수 작성-

1. 함수(function)

 

데이터 타입에서 참조 타입(reference type)중 하나로 자바스크립트에서 함수를 정의하는 방법은

 

함수 선언식(function declaration), 함수 표현식(function expression)이 있다.

 

 

 

2. 함수 선언식(function declaration)

 

일반적인 프로그래밍 언어의 함수 정의 방식과 유사함

 

function 함수명(인자) {

 <함수 수행문장>

}

 

 

 

3. 함수 표현식(function expression)

 

표현식 내에서 함수를 정의하는 방식

 

파이썬의 lambda함수처럼, 함수명을 생략한 익명 함수로 정의가능함

 

변수 키워드 변수명 = function (인자) {<수행문장>}

 

 

표현식에 함수명을 명시하는 것도 물론 가능하다.

 

하지만 함수 호출에는 변수명으로 호출해야하며, 함수명으로는 호출할 수 없다

 

변수 키워드 변수명 = function 함수명(인자) {

<수행문장>

}

 

다음처럼 변수명 mySub로는 호출가능한데

 

 

 

함수명인 namedSub로는 호출 불가능함

 

 

디버깅 용도로 쓴다는데 무슨말인지 모르겠다

 

대충 자바스크립트 내부에서는 (함수명)으로 해당 함수를 인식하고 있음

 

예를 들어 mySub라고만 찍어보면

 

 

근데 어떤 다른 함수를 mySub에 재할당해버리면

 

 

 

그러면 mySub가 어떤식으로 바뀌었는지 알수있다고 해서.. 디버깅용도라나 뭐라나.. 근데 거의 안쓴다고함

 

 

4. 함수의 인자

 

4-1) 기본 인자(default argument)

 

함수의 인자를 작성할때, "인자 = 기본값"형태로 인자의 기본값을 설정 가능함

 

 

 

4-2) 매개변수와 인자의 개수 불일치 허용

 

자바스크립트에서는 매개변수의 개수와 인자의 개수가 안맞아도 에러가 나지 않는다

 

 

1. 매개변수보다 인자의 개수가 많을 경우

 

인자보다 많이 들어오는건 무시하는듯

 

문제 없이 동작함1

 

 

문제없이 동작2

 

역시 인자보다 많이 들어오는건 무시함

 

 

2. 매개변수의 개수가 인자보다 적은 경우..

 

부족한 인자는 undefined라고 처리함

 

 

 

5. 전개 구문(spread syntax)

 

... 으로 사용?

 

전개 구문을 사용하면 배열이나 문자열과 같이 반복 가능한 객체를 배열의 경우는 요소,

 

함수의 경우는 인자로 확장할 수 있다

 

5-1) 배열과의 사용(배열 복사)

 

...parts 부분에 parts의 요소들이 들어감

 

 

 

5-2) 함수와의 사용(rest parameters)

 

정해지지 않은 수의 매개변수를 배열로 받는다.. 마치 파이썬의 *을 쓴것과 유사하네

 

아무튼 배열로 안주더라도 그것을 묶어서 배열로 받는게 일단 차이가 있긴함

 

 

6. 호이스팅

 

함수 선언식으로 정의한 경우는 호이스팅이 발생함

 

함수 호출 이후에 선언해도 동작함

 

 

 

반면 함수 표현식으로 선언한 함수는 함수 정의 전에 호출 시 에러를 발생함

 

함수 표현식으로 정의된 함수는 변수로 평가되어 변수의 scope 규칙을 따른다

 

그러면 var로 선언하면 호이스팅 가능한거 아니여??

 

 

 

근데 var로 선언해도 호이스팅 안됨

 

 

 

sub가 함수가 아니라는 에러 나왔다고 혹시나 순서를 바꿔봤는데

 

물론 순서를 바꾸면 동작함

 

 

 

 

 

7. 화살표 함수(arrow function)

 

함수를 간결하게 정의하고자 하는 문법

 

function 키워드 생략 가능하고

 

함수의 매개변수가 하나라면, 매개변수의 ()을 생략할 수 있고

 

함수 내용이 한줄이면 {}와 return도 생략 가능함

 

화살표 함수는 항상 익명함수임

 

=== 함수 표현식에서만 사용가능하다????

 

 

8. 즉시 실행 함수(IIFE, Immediately Invoked Function)

 

선언과 동시에 실행되는 함수

 

함수의 선언 끝에 '()'을 추가해서 선언되자 마자 실행하는 형태

 

그 끝인 '()'에 인자를 넘겨줄 수 있음

 

즉시 실행 함수는 선언과 동시에 실행되므로 함수를 다시 호출할 수는 없다

 

초기화 부분에 많이 사용

 

일회성이므로 익명함수로 사용

 

 

 

TAGS.

Comments