- 하나의 단위로 실행되는 집합.
- 모든 함수에는 바디가 존재하며, 함수 바디는 함수를 구성하는 문의 모음.
function say() {
...
}
- 이와 같은 형태: 함수 선언. 하지만, 선언을 한다고 실행이 되지는 않는다.
- 함수를 실행(호출)할때는 함수 이름 뒤에 ()를 쓴다.
반환 값(Return Value)
- 함수 바디 안에서 return 키워드를 사용하면 진행되던 함수를 즉시 종료하고 값을 반환한다.
- 이 값을 반환값이라 부른다.
호출과 참조
- 함수도 객체(Object)
- 다른 객체와 마찮가지로 넘기거나 할당이 가능함.
- 함수 식별자 뒤에 괄호를 쓰면 함수를 호출한다고 하고, 그 함수는 실행됨.
- 함수 식별자 뒤에 괄호를 쓰지 않으면 다른 값과 마찮가지로 함수를 참조하는 것. 그 함수는 실행 X
- 함수를 참조로 써서 다른 변수에 할당하면 그 다른 변수로도 함수를 호출하는 것이 가능하게 됨.
- 함수를 변수뿐만 아니라 객체 프로퍼티 또는 배열 요소로도 할당할 수 있음.
예를 들어, function a() { ... } a라는 함수가 있다.
a(); // 이것은 함수 호출. a 함수가 실행되며, 반환값도 존재한다(없을 수도 있지만)
a; // 이것은 함수 참조. 사용방법은 다음과 같다.
const func = a;
func();
이처럼 함수 a를 func변수에 할당할 수 있다. 이렇게되면 func()으로도 a(); 와 동일한 결과가 출력된다.
함수와 매개변수
- 함수를 호출할때 정보를 같이 전달하는 경우 매개변수(Argument, Parameter)를 사용.
- 매개변수는 함수가 호출되기 전에는 존재하지 않는다. 호출되면 진정한 '실제 매개변수'가 됨.
- 실제 매개변수는 일단 변수와 비슷하지만, 함수 바디 안에서만 존재함.
- 원시 값을 갖은 변수가 함수 안에, 밖에 동일한 변수가 있을때,
함수 안에서 변수가 변경되더라도 외부 변수는 변경되지 않음. 즉, 이름은 같지만 다른 개체
- 객체의 경우, 함수 안에, 밖에 동일한 객체가 있을때,
함수 안에서 객체가 변경되면 외부에 선언된 객체도 변경됨. 즉, 같은 객체를 참조하므로 동일함.
(참조한다 = 가리킨다)
- 이것이 원시 값과 객체의 핵심적인 차이점.
정리하면, 원시 값을 담은 변수는 수정할 수 있지만 원시값 그 자체는 바뀌지 않는다.
반면, 객체는 변할 수 있다.
- 다른 언어들은 매개 변수의 갯수가 다르면 다른 함수로 간주함.
- 자바스크립트는 차이가 없다. 함수가 있다면 매개변수를 몇 개를 전달하든 같은 함수로 간주함.
- 즉, 어떤 함수를 호출하던지 그 함수에 정해진 매개변수 숫자와 관계없이 전달 가능.
- 정해진 매개변수에 값을 전달하지 않으면 undefined가 할당됨.
'개발 > 자바스크립트' 카테고리의 다른 글
[자바스크립트] ES6에서 추가된 화살표 표기법 (0) | 2017.09.15 |
---|---|
[자바스크립트] 스코프 관련 (0) | 2017.09.15 |
[자바스크립트] 표현식 && 연산자 (0) | 2017.09.14 |
[자바스크립트] for .. in 루프 (0) | 2017.09.14 |
[자바스크립트] 데이터 타입 변환하기~ (0) | 2017.09.14 |