본문 바로가기

카테고리 없음

javascript 변수, 함수, 연산자 - 함수선언

지난 글에 이어 이번에는 함수 선언에 대해서 정리해보겠습니다.

변수의 선언에 대해서 정리한 글은 이전 글 https://chois82.tistory.com/62를 참고하시기 바랍니다.

 

2. 함수 선언

 

function doSomething() {

    alert("Hello world");

}

 

// 나쁜 예
doSomething();

function doSomething() {

    alert("Hello world");

}​

자바스크립트 엔진이 다음 예제처럼 코드를 해석하므로 위 코드는 정상적으로 동작합니다.

// 나쁜 예
function doSomething() {
    alert("Hello world");
}

doSomething();​

 

이전에 이야기했든이 자바스크립트 엔진이 해석하는 방법대로 코드를 작성해야 하므로 함수를 사용하기 전에 반드시 먼저 선언할 것을 권장합니다. 이러한 디자인은 크락포드의 코드 컨벤션에서 볼 수 있습니다. 크락포드는 다음 예제처럼 지역 함수는 변수 선언 이후에 선언할 것을 권장하고 있습니다.

function doSomethingWithItems(item) {
    var i, len,
        value   = 10;
        result  = value + 10;
    function doSomething(item) {
        // 실행코드
    }

    for(i=0; len=items.length; i<len; i++) {
        doSomething(items[i]);
    }
}

JSLing와 JSHint는 함수 선언 전에 함수를 사용하면 경고 메시지를 출력합니다.

// 나쁜 예
if (condition) {
    function doSomething() {
        alert("Hi");
    }
} else {
    function doSomething() {
        alert("Yo");
    }
}

앞의 코드는 브라우저에 따라 동작할 수도 있고 동작하지 않을 수도 있습니다. 대부분 브라우저는 조건문과 상관없이 두 번째 함수 선언문으로 함수를 선언합니다. 파이어폭스는 confition 값에 따라 적합한 함수를 선언합니다. 이처럼 ECMAScript에서 불분명하게 정해진 명세로 인해 브라우저 별로 다르게 구현되므로 예제처럼 코드를 작성하면 안 되고 반드시 조건문 밖에 함수를 선언해야 합니다. 구글 자바스크립트 스타일 가이드에서는 이 패턴을 금지하고 있습니다.

 

3. 함수 호출문에 공백 넣기

일반적으로 함수 호출문은 복합문과 쉽게 구분할 수 있도록 함수명과 괄호 사이에 아무런 공백도 입력하지 않는 스타일을 권장합니다.

// 좋은 예

doSomething(item);

 

// 나쁜 예 : 복합문처럼 보임

doSomething (item);

 

// 비교를 위해 복합문을 추가했습니다.

while (item) {

    // 실행코드

}

 

크락포드의 코드 컨벤션도 이 스타일을 권장하고 있습니다. 또한 Dojo 스타일 가이드, SproutCore 스타일 가이드, 구글 자바스크립트 스타일 가이드에서는 예제 코드를 통해 이 스타일을 권장합니다. jQuery 코어 스타일 가이드는 이 스타일에서 더 나아가 다음 예제처럼 괄호를 연 후에 닫기 전에 공백을 추가해야 한다고 말합니다.

// jQuery style

doSomething( item );

 

문자열일 때는 공배를 넣지 않습니다. 다음의 예제는 모두 jQuery에서 유효한 문장입니다.

// jQuery 예외 규칙

doSomething(funtion () {});

doSomething({ item: item });

doSomething([ item ]);

doSomething("Hi");

 

그러나 스타일에 예외가 있으면 개발자에게 혼란을 줄 수 있어 좋지 않습니다.

 

이번 포스팅에서는 '함수 선언'과 '함수 호출문에 공백 넣기'에 대해서 정리해보았습니다.

다음 포스팅에서는 '함수 선언하고 바로 호출하기'에 대해서 정리해보겠습니다.

 

그럼 이만.

끝.