hello(name); // 호이스팅이 일어나므로 호출이 가능하다. // 함수 선언문 functionhello(name) {
console.log("hello, "+name);
}
함수 선언문에서의 호이스팅
함수선언문은 코드를 구현한 위치와 관계없이 자바스크립트의 특징인 호이스팅이 일어난다. 함수 선언문에서의 호이스팅이란 브라우저가 자바스크립트를 해석할 때 함수 선언문들이 코드 맨 위로 끌어올려지는 것을 의미한다. 이러한 특징 때문에 함수 선언문의 위치와 관계없이 함수 선언을 했으면 어디서든 호출이 가능하다.
함수 표현식은 호이스팅이 일어날까?
자바스크립트는 코드를 한 줄씩 읽으면서 실행하는 interpreter 언어이다. 자바스크립트가 한 줄씩 읽을 때, 함수 표현식은 코드에 도달해야 함수가 생성되기 때문에 호이스팅이 일어나지 않는다.
5. 함수의 호출 (call)
a();
✔ 함수를 여러 번 호출하면 내부 구현문이 여러 번 호출이 된다
6. 반환 값
함수에서 값을 반환하면서 종료한다.
반환 값을 쓰지 않더라도 내부적으로 undefined가 반환되는 것을 볼 수 있다. return문만 실행되어 crystal만 반환하고 hello는 콘솔에 출력되지 않고 a 함수가 종료되는 것을 볼 수 있다.
1) 값 하나만 반환
5만 반환이 된다.
2) 값 여러개 반환
값을 여러개 리턴하려면 배열로 반환하는 것이 가능하다. 값을 여러 개 리턴 하려면 배열로 묶어서 리턴 할 수 있다.
7. 매개변수(parameter)와 인수(argument)
함수를 선언할 때는 함수의 소괄호 안에 넣는 값을 매개변수(parameter), 함수를 호출할 때 함수의 소괄호 안에 넣는 값을 인수(argument)라고 한다.
// a 함수를 선언functiona(parameter) {
console.log(parameter);
}
// a 함수를 호출a(argument);
매개변수(parameter)와 인수(argument)는 연결되어 있다. 함수를 선언할 때 파라미터는 변수처럼 선언된다. 함수를 호출 시 아규먼트는 파라미터의 변수 값이 되어 함수가 동작한다. let parameter = 'argument';
매개변수(parameter)와 인수(argument) 는 여러 개 사용하는 것도 가능하다. 아규먼트가 파라미터보다 많은 경우 무시된다. 위의 코드를 보면 아규먼트 'Argument'가 무시되고, Hello Parameter만 콘솔에 출력되는 것을 볼 수 있다.
매개변수와 인수가 서로 짝지어지지 않고, 매개변수가 인수보다 많은 경우 undefined 값이 할당된다.
함수 내에서 arguments라는 값을 사용할 수 있다. arguments라는 변수는 내가 지정한 argument들을 배열로 저장하고 있다.