2014-08-30 3 views
1

나는 this SO question을 통해 읽었습니다. 나는 일종의 무슨 일이 일어나고 있는지 이해하지만 왜! 함수가 부울 값과 반대 값을 반환하지 않기 전에?

!function foo() { 
    console.log(true) ; 
}() 

false을 반환하지 않습니다 내가 왜 혼란 스러워요. 정의되지 않은 사실 때문에!

!function() {}()

이 또한 사실이 경우, 함수의 리턴 값 의 대향 부울을 리턴한다. 당신이 실제 반환 값은 호출의 결과 싶은 경우에, 이런 식으로 일을하려고 :

false 반환해야한다고 생각한다 "는 부울 반대 돌아갑니다." 왜 그렇지 않은가? alert(!true); //false

+3

왜냐하면 함수가 값을 반환하지 않기 때문에 거짓 값이고'true '와 반대의 값인'undefined'가 반환됩니다. –

+1

이미 질문에 답변을 포함 시켰습니다 : "" 이 함수의 반환 값과 반대의 값을 반환합니다! 왜냐하면! ** undefined는 true입니다. **. * 아무 것도 반환하지 않기 때문에 함수의 반환 값은'undefined '입니다. –

+0

'! true'는'! function foo() {}()'와 어떤 관련이 있습니까? 함수 자체가 호출 된 후 반환 값 대신 부정되는 것으로 생각 했습니까? 다른 반환 값을 주면 차이가 나타납니다. 'return false' ...'return true' ...'return 0' ... 등. –

답변

6

return 문이 없으면이 함수는 undefined을 반환합니다. !undefined에 적용하면 true이됩니다.

는 인생 전에 !의 관용적 사용은 단지 — 관용적 표현이다

console.log(!function() { return true; }()); 

참고하십시오. ! 연산자가 반환 값에 거의 영향을 미치지 않는 사실은 반환 값이 호출 환경에서 완전히 무시되기 때문에 거의 중요하지 않습니다. 따라서

+function() { 
    // whatever 
}(); 

+는 단항 연산자는 단항 연산자 ! 상이한 경우에도 효과적으로 정확히 동일하다.

+0

그래, 그게 정확히 무슨 뜻이야. 나는이 문법이 바이트를 저장한다는 링크 된 질문에서 이해할 수 있지만 반환되는 반대 값을 왜 바꾸고 싶습니까? 'console.log (!! function() {return true;}());'더 의미가 없습니까? – 1252748

+0

나는 몇 번 더 읽었다. 이 구문은 함수가 아무 것도 반환하지 않을 때만 의미가 있다고 말하고 있습니까? – 1252748

+0

나는 링크 된 답변에서 : _ "가끔 우리는 함수를 만들 때 바로 함수를 호출하려고합니다.이 함수를 호출하려고 시도 할 수도 있습니다 : function() {}()' SyntaxError가 발생합니다." _ 그 결과 구문 오류가 발생합니다. 왜 작동하지 않는지 나는 이해하지 못한다. 감사. – 1252748

2

빈 return 문이나 존재하지 않는 함수는 호출시 정의되지 않은 값을 반환합니다. 적용! 0, null, undefined와 같은 "거짓"값으로 true를 반환합니다.