https://javascriptweblog.wordpress.com/2010/07/06/function-declarations-vs-function-expressions/
Function Declarations vs. Function Expressions
Lets start with a short quiz. What is alerted in each case?: Question 1: Question 2: Question 3: Question 4: If you didn’t answer 8, 3, 3 and [Type Error: bar is not a function] respectively,…
javascriptweblog.wordpress.com
함수선언( Function Declaration )은 함수변수를 다른 변수에 할당 없이 정의하는 것이다.
때문에 다른 함수, 변수 블럭에 엮이지 않는다.
그리고 다른 변수 선언처럼 var ## = 형식으로 시작되는게 아니라 function ##() 으로 시작한다.
함수를 호출 하는 것은 그 함수의 스코프와 부모 스코프에서 가능하다.
function bar() {
return "it's me";
}
bar() // it's me
bar // function
함수표현( Function Expression )은 더 넓은 범위의 문법으로 정의된 함수이다.
( A Function Expression defines a function as a part of a larger expression syntax )
함수 표현으로 선언된 함수는 이름을 붙일수도 안 붙일 수도 있다.
그리고 function ##() 으로 시작하지 않고 이 함수가 표함된 스코프 밖에서는 호출 불가능하다.
// 이름 없는 함수 표현
var a = function() {
return 3;
}
// 이름 있는 함수 표현
var a = function bar() {
return 3;
}
// 스스로 호출하는 함수 표현, IIFE
// ()로 함수를 감싸 선언이 아닌 표현식으로 표현됨
(function sayHello() {
alert("hello!");
})();
두 방식의 차이점은 일단 선언형의 경우 함수가 코드 상단으로 끌어올림( hoisted ) 된다.
표현형은 끌러올림되지 않는다. 때문에 표현된 함수가 존재하는 스코프의 변수들에 접근할 수 있다.
사실 자바스크립트에 선언된 변수들은 호이스팅 된다. 하지만 거기에 표현된 함수는 그렇지 않다.
아직은 잘 모르겠지만 함수 표현이 함수 선언보다 함수형 프로그래밍에 더 어울린다고 한다.