2012-05-23 1 views
2
!function() { return false; }() 

나는 왜 이런 식으로 글을 쓸지 모르지만 어떻게 작동하는지 질문합니다. 내가 알고있는 것처럼, 느낌표 두 가지 수행합니다 식으로 변경,! function()의 동작 세부 정보 (false); }()

  1. 그것은 function() { return false; }에 작용을 전체 라인이 true로 평가 있도록 또한, 실행 된 함수의 결과에 작용

그래서 제 질문은 다음과 같습니다

  1. 이 올바른 설명인가?
  2. 올바른 경우 이 !보다 긴밀하게 바인딩되므로 첫 번째 부분 (함수 자체를 표현식으로 변경)이 어떻게 발생 했습니까? 왜 감탄 부호는 전체 선 전체에 작용하지 않습니까?
+0

그렇게 나타납니다 : http://jsfiddle.net/ –

+1

이 유용 할 수 있습니다 : https://developer.mozilla.org/en/JavaScript/Reference/Operators/Operator_Precedence – jbabey

답변

1

1)은 "변화"를 나던. 파서가 "함수"비트를 통과 할 때 표현식을 기대하기 때문에 "함수"는 함수 구문 대신 (아마도 익명 인) 함수 표현식의 일부로 구문 분석됩니다.

2) 전체 행에 대해 입니다. 당신이 우선 순위를 가지고 보면, jbabey에 의해 제안, 그 함수 호출이보다 긴밀하게 결합 후 부정 연산자 그래서 전체가 같은

! ((function(){})()); 

또는 유사한 아마도 더 읽기 버전에서 평가 참조 :

var f = function(){ ... }; 
! (f()); 
+0

당신의 대답 중 파트 1이 나를 훨씬 더 명확하게했습니다. 감사! –

4

operator precedence에있어서, (new Function 속기 임) function 선언 제 일어날 함수 호출 () 번째 일어날 것이고, 부정 ! 마지막 일어날 것이다. 선명도

편집 :이 같은 한 줄이 같은 일을 수행 할 것을 다시 쓸 수는 :

// declare an anonymous function and assign it to the myFunc variable 
var myFunc = function() { 
    return false; 
}; 

// execute the function and store it's return value (false) in returnValue 
var returnValue = myFunc(); 

// negate the return value (true) 
var output = !returnValue; 
+0

감사합니다,하지만 난이 부분을 이해 않았다 그리고 내 질문에()보다 더 단단히 묶어 언급! 나는 다른 부작용이 어떻게 생겼는지 혼란스러워했다. –