자바스크립트로 프로그래밍 입문 17. 함수2-함수 선언, 함수 표현

함수 선언(Function Declaration)

지금까지 함수를 선언할 때 아래와 같은 방식으로 선언했었습니다.

function sayHi(){
  console.log("hi!");
}

이 방식을 함수 선언(Function Declaration)이라고 합니다.

함수 표현(Function Expression)

첫번째 방식과는 다르게 아래와 같이 함수를 선언할 수도 있습니다.

var sayHello = function(){
  console.log("hello!");
}

변수에 함수를 담는 모양이 되었는데, 이 방식을 함수 표현(Function Expression)이라고 합니다.

함수 선언과 함수 표현의 차이점

함수 선언으로 생성된 함수든, 함수 표현으로 생성된 함수든, 함수의 호출 방법은 같습니다. 둘의 차이점은 브라우저가 코드를 받아드리는 방식에 차이인데, 아래 코드를 복사해서 실행해봅시다.

sayHiDeclaration();

function sayHiDeclaration(){
  console.log("hi! from Declaration");
}

함수 선언전에 함수를 먼저 호출했으므로 실행이 안될 것 같지만, 실행이 됩니다! 이는 코드 해석기가 함수 선언부를 찾아서 먼저 적용한다음 나머지 코드들을 실 행시키기 때문입니다.

반면에 함수 표현은 반드시 함수 호출 전에 이루어져야 합니다.

sayHelloExpression();

var sayHello2 = function(){
  console.log("helloi from Expression");
}

위 코드를 실행하면 sayHelloExpression 함수를 찾을 수 없다는 에러가 납니다.

댓글

-
-충한 2020.11.23
함수선언부분에서 호출이 먼저 됐는데 실행되는 것는 자바스크립트만의 특징인가요? 아니면 다른 언어도 마찬가지인가요?
I
Ian H 2020.11.23
@-충한,
C언어는 함수와 변수선언을 무조건 코드작성 전에 해야 하고, Java는 모든 함수가 class의 일부분이므로 global함수의 개념이 없습니다. 다른 언어는 제가 잘 알지 못합니다. 
C언어와 Java를 봤을 때 함수선언을 먼저 확인하는 것은 JavaScript의 특징이라고 할 수 있겠네요.
하지만 언어의 트랜드(개발자의 편의에 중점을 둠)를 봤을 때, 아마 최신언어들은 JavaScript와 비슷하지 않을까 하는 생각이 듭니다.
댓글쓰기

이 글에 댓글을 다시려면 SNS 계정으로 로그인하세요. 자세히 알아보기

UP