Recent Posts
Recent Comments
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Today
Total
관리 메뉴

고리타분한 개발자

함수 (Function) - 함수 선언과 표현식 (Function Declarations and Expressions) 본문

JavaScript/Garden

함수 (Function) - 함수 선언과 표현식 (Function Declarations and Expressions)

sunlee334 2017. 11. 9. 00:31

Javascript에서 함수는 First Class Object입니다. 즉, 함수 자체가 또 다른 함수의 인자가 될 수 있다는 말입니다. 그래서, 익명 함수를 비동기 함수의 콜백으로 넘기는 것도 이런 특징을 이용한 일반적인 사용법입니다.


함수 선언


function monkey() {}


위와같이 선언한 함수는 프로그램이 실행하기 전에 먼저 호이스트(Hoist)(스코프가 생성)되기 때문에 정의된 스코프(Scope) 안에서는 어디서든 이 함수를 사용할 수 있습니다. 심지어 함수를 정의하기전에 먼저 함수를 호출하여도 정상 작동 합니다.


monkey(); // 이 코드가 실행되기 전에 monkey가 만들어지므로 잘 동작한다.
function monkey() {}


함수 표현식


var monkey = function() {}; // monkey에 익명함수를 선언
monkey; // 'undefined'
monkey(); // TypeError가 난다.
var monkey = function() {};


'var' 를 이용하여 선언하는 경우, 코드가 실행되기 전에 'monkey'라는 이름의 변수를 스코프의 맨 위로 올리게 된다. 이때 monkey의 값은 undefined가 된다. 하지만, 변수에 값을 할당하는 일은 런타임 상황에서 이루어지게 되므로 실제 코드가 실행되는 순간의 monkey변수는 기본값인 undefined가 된다.


이름 있는 함수의 표현식


이름이 있는 함수를 할당할 때에도 특이한 경우가 있습니다.


var monkey = function animal() {
animal(); // 이 경우는 동작 하지만,
}
animal(); // 이 경우는 참조에러를 발생시킵니다.


monkey 함수 스코프 밖에서는 monkey 변수 외에는 다른 값이 없기 때문에 animal은 함수 밖에서 사용할 수 없지만 함수 안에서는 사용할 수 있습니다. 이와 같은 방법으로 자바스트립트에서 어떤 함수의 이름은 항상 그 함수의 지역 스코프 안에서 사용할 수 있습니다.



License

이 게시글은 JavaScript Garden을 참고하여 작성 되었습니다. (https://github.com/BonsaiDen/JavaScript-Garden)



Comments