함수
함수선언방식
function one (a,b) {return a+b}
one(1,2)
//{3}
var one = function(a,b) {return a+b}
one(1,2)
//{3}
//함수명을 사용하지 않음
//함수명이 아닌 변수명으로 호출
var one = new Function('a','b', 'return a+b');
console.log(one(10,90)); // 100
var res = square(5);
function square(number) {
return number * number;
}
위 코드를 보면 함수 선언문으로 함수가 정의되기 이전에 함수 호출이 가능하다. 함수 선언문의 경우, 함수 선언의 위치와는 상관없이 코드 내 어느 곳에서든지 호출이 가능한데 이것을 함수 호이스팅(Function Hoisting)이라 한다.
자바스크립트는 ES6의 let, const를 포함하여 모든 선언(var, let, const, function, function, class)을 호이스팅(Hoisting)한다.*
!!!중요
var res = square(5); // TypeError: square is not a function
var square = function(number) {
return number * number;
}
함수 선언문의 경우와는 달리 TypeError가 발생하였다. 함수 표현식의 경우 함수 호이스팅이 아니라 변수 호이스팅이 발생한다.
변수 호이스팅은 변수 생성 및 초기화와 할당이 분리되어 진행된다. 호이스팅된 변수는 undefined로 초기화 되고 실제값의 할당은 할당문에서 이루어진다.