함수

함수선언방식

  1. 함수선언문
function one (a,b) {return a+b}

one(1,2)
//{3}
  1. 함수표현식
var one = function(a,b) {return a+b}

one(1,2)
//{3}
//함수명을 사용하지 않음
//함수명이 아닌 변수명으로 호출
  1. 생성자함수
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로 초기화 되고 실제값의 할당은 할당문에서 이루어진다.