본문 바로가기

Development/Coding

커피스크립트에 대한 아쉬움

커피스크립트 코딩 환경을 꾸미고 이것 저것 해보는 중 아쉬운 점이 발견되었다.

>> 이 문제는 커피가 함수 선언과 함수 표현에 따른 몰이해에 대한 문제로 깨닳음





(예제는 AJ 님의 블로그 코드입니다.)

자바스크립트 특성인 호이스팅 과정 때문에 발생하는 문제 같기도 하고 아무튼 아래의 코드를 보면서 테스트해본 결과 함수의 순서에 따라 작동이 다르다.

 A = ->

    count = 100
    console.log "count A : " + count
    A1 = (B1) -> B1(count)
B = ->
    A2 = A()
    B2 = (count1) -> console.log "count B : " + count1
    A2(B2)

B()


다른 함수에 있는 로컬 변수를 사용하기 위해 클로저를 사용했다.
결과는 아래와 같다.

count A : 100
count B : 100


그런데 구문의 순서를 조금 변경하여 아래와 같이 코딩하게 되면 실행되지 않는다.

A = ->
    count = 100
    console.log "count A : " + count
    A1 = (B1) -> B1(count)
B = ->
    A2 = A()
    A2(B2)
    B2 = (count1) -> console.log "count B : " + count1

B()


타입 에러가 발생한다.

TypeError: undefined is not a function


일단 졸려서 삽은 던져두고...

요약 : 커피스크립트 공부하기보다 자바스크립트 먼저 익숙해지도록 하자.

원래 자바스크립트 코드는 아래와 같음

function A() {
    var count = 2011;
    console.log("Local count = " + count)

    return function (callback) {
        return callback(count);
    }
}
function B() {
    var A2 = A();
    
    A2(function (c1) {
        console.log("A()'s count = " + c1);
    });
}

B();