함수 생성
함수 리터럴
1 | function add(x, y) { |
함수 선언문
함수 선언문은 반드시 함수명이 정의 되어야 한다
함수 선언문 형태로 생성된 함수의 유효 범위는 코드의 맨 처음부터 시작된다
1 | function add(x, y) { |
함수 표현식
함수는 하나의 값 처럼 취급되며 일급 객체 라고 한다
함수 리터럴을 통해 만든 함수를 변수에 할당하는 방식을 함수 표현식 이라 한다
함수 표현식을 통해 함수를 만들면 익명 함수의 생성이 가능하다
다음과 같은 경우 add는 익명함수를 참조하기 때문에 plus에 참조값을 그대로 할당할 수 있다
또한 함수 표현식으로 생성한 함수는 변수와 이름이 다른 경우 외부에서 호출할 수 없다
함수 표현식으로 생성된 함수의 유효 범위는 함수가 선언된 후부터 시작된다
1 | var add = function (x, y) { |
기명 함수로 생성한 경우 재귀적 호출이 가능하다
1 | var add = function factorial(n) { |
Function() 생성자
함수는 Function()이라는 기본 내장 생성자 함수로부터 생성된 객체 이다
어떤 방식으로 함수를 생성하든 내부적으로 Function() 생성자를 통해 함수가 생성된다
1 | var add = new Function('x', 'y', 'return x + y'); |
함수 호이스팅
자바스크립트에서 변수의 생성과 초기화의 작용이 각기 다른 시점에 일어나기 때문에 함수 호이스팅이 발생한다
함수 선언문으로 생성한 함수의 경우 유효 범위는 함수를 선언하기 전부터 시작되기 때문에 이를 함수 호이스팅이라 한다
더글러스 크락포드는 함수 생성에 있어 함수 표현식만을 사용할 것을 권고했다
그 이유는 함수를 사용하기 전에 반드시 선언해야한다는 규칙을 무시하기 때문에 코드의 구조를 엉성하게 만들 수 있기 때문이다