2011-12-30 4 views
2

이것은 우스꽝스럽게되고 있습니다 ...이 함수를 호출 할 수없는 이유는 무엇입니까?

왜 이렇게하려고하면 오류가 발생합니까?

#...codecodecode... 

g = generateGuid() 

#...codecodecode... 

generateGuid = -> 
    "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace /[xy]/g, (c) -> 
    r = Math.random() * 16 | 0 
    v = (if c is "x" then r else (r & 0x3 | 0x8)) 
    v.toString 16 

나는 개인 함수를 호출되고 싶은 모든

...

+1

이 게시물에 오류 메시지/세부 사항을 포함,뿐만 아니라 원하는 더 적용 제목과 설명을 선택하십시오 행동. –

답변

5

driis가 맞습니다. 그의 대답에 확장하려면 : 당신은 당신이 어디 그 범위 내에서 (심지어 그 정의 전)에서 generateGuid를 호출 할 수있는 자바 스크립트 관용구

function generateGuid() { ... } 

에 사용할 수있다. CoffeeScript는 이것을하지 않습니다. 대신,

var generateGuid = function() { ... } 

이 작업을 수행하는 몇 가지 이유가 있습니다로 컴파일하지만, 길고 그것의 짧은 기능은 다른 모든 변수와 동일한 범위 지정 규칙을 준수한다는 것입니다. 값이 generateGuid으로 지정되기 전에 generateGuid()undefined으로 전화를 시도합니다.

참고 비동기 콜백이 자바 스크립트에서의 작업 방식에 의한 즉,이 작동합니다 :

3

당신은이 정의되기 전에 함수를 호출하려고합니다. This works는 - 사실, 그렇지 않은 더 많은 일부 자바 스크립트를 통해 문법 설탕보다이 당신에게 놀라운 경우

#...codecodecode... 

#...codecodecode... 

generateGuid = -> 
    "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace /[xy]/g, (c) -> 
    r = Math.random() * 16 | 0 
    v = (if c is "x" then r else (r & 0x3 | 0x8)) 
    v.toString 16 

g = generateGuid() 

, 커피 스크립트는 자바 스크립트로 컴파일 기억 해요. Javascript에 적용되는 대부분의 규칙은 Coffeescript에도 적용됩니다.

+1

제외하고 javascript는 정의되기 전에 함수를 호출합니다. * 작동 *, 함수 호이스트 때문에 –

관련 문제