2014-05-20 3 views
0

나는 showAnswer(...) undefined 각 테스트에 나타나 왜 이해가 안 CoffeeScript: Accelerated Development커피 스크립트의 기본 인수

x = true 
showAnswer = (x = x) -> 
    console.log if x then 'It works!' else 'Nope.' 

console.log "showAnswer()", showAnswer() 
console.log "showAnswer(true)", showAnswer(true) 
console.log "showAnswer(false)", showAnswer(false) 

에서 다음 예제를 찾고 있어요.

Nope. 
showAnswer() undefined 
It works! 
showAnswer(true) undefined 
Nope. 
showAnswer(false) undefined 

각 사례의 출력을 설명하십시오.

+0

을하면 돈 디폴트 값을주고 싶다면 함수 앞에'x = true'를 정의 할 필요가 없습니다. '(x = true) ->'유효한 (그리고 내가 선호하는) 메소드 서명이다. –

답변

3

CoffeeScript는 기본적으로 함수의 마지막 문을 반환한다는 것을 잊지 마십시오. 그래서 당신의 showAnswer 기능은 실제로 말한다 것은 :

showAnswer = (x = x) -> 
    return console.log if x then 'It works!' else 'Nope.' 

또는 자바 스크립트로 컴파일 :

showAnswer = function(x) { 
    if (x == null) { 
    x = x; 
    } 
    return console.log(x ? 'It works!' : 'Nope.'); 
}; 

실현하기 위해 다른 점은 console.log 방법은 undefined를 반환한다는 것입니다. 따라서 showAnswer 메소드의 결과를 기록하면 undefined이 인쇄됩니다. 같은 당신의 console.log 문을 수정 또는

showAnswer = (x = x) -> 
    if x then 'It works!' else 'Nope.' 

: 내가 제대로 당신의 의도를 이해한다면

, 내가이 일을 원래의 기능을 수정하는 것, 보조 노트로

console.log "showAnswer()" 
showAnswer() 

console.log "showAnswer(true)" 
showAnswer(true) 

console.log "showAnswer(false)" 
showAnswer(false)