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 ) 된다.

표현형은 끌러올림되지 않는다. 때문에 표현된 함수가 존재하는 스코프의 변수들에 접근할 수 있다.

사실 자바스크립트에 선언된 변수들은 호이스팅 된다. 하지만 거기에 표현된 함수는 그렇지 않다.

 

아직은 잘 모르겠지만 함수 표현이 함수 선언보다 함수형 프로그래밍에 더 어울린다고 한다.

 

+ Recent posts