[javascript] 함수 표현식 앞에 JavaScript 더하기 부호

나는 즉시 호출 된 함수에 대한 정보를 찾고 있었고 어딘가 에서이 표기법을 발견했습니다.

+function(){console.log("Something.")}()

누군가 +가 기능 앞에 있는 표시가 무엇을 의미 하는지 설명 할 수 있습니까 ?



답변

구문 분석기가 다음에 오는 부분을 +표현식으로 취급 하도록합니다. 일반적으로 다음과 같이 즉시 호출되는 함수에 사용됩니다.

+function() { console.log("Foo!"); }();

포함하지 않는 +파서가이 단어 (표현 또는 여러 비 표현 문이 될 수 있습니다) 성명 기대하고 있어요 상태에있는 경우가, function함수의 시작 부분과 같은 모양 선언 이 아닌 함수 표현 그렇게하고을을 ()을 다음 (위 줄의 끝에있는 것)은 구문 오류 일 것입니다 (예에서 이름이없는 것처럼). 을 사용 하면 +함수 표현식이됩니다. 즉, 이름이 선택적이고 함수에 대한 참조가 생성되어 호출 될 수 있으므로 괄호가 유효합니다.

+옵션 중 하나 일뿐입니다. 그것은 또한 할 수있다 -, !, ~, 또는 다른 모든 단항 연산자에 대해. 또는 괄호를 사용할 수 있습니다 (구문 적으로 더 일반적이지만 정확하지는 않습니다).

(function() { console.log("Foo!"); })();
// or
(function() { console.log("Foo!"); }());


답변

@TJCrowder의 답변에 대한 자회사 +는 일반적 으로이 SO 답변이 설명하는 것처럼 값의 숫자 캐스팅을 강제하는 데 사용됩니다 . 이 경우이를 ‘단일 더하기 연산자'(구글링 용이성)라고합니다.

var num = +variant;

따라서 함수 앞에서 함수의 결과를 숫자로 해석하도록 할 수 있습니다. 나는 그것이 아직 의심 스럽지만 이론적으로 JIT는 함수를 숫자 전용 함수 등으로 컴파일하는 데 사용할 수 있습니다. 그러나 더 큰 표현식에 사용될 때 단항 더하기가 연결되는 것을 방지하려면 괄호가 필요합니다.

blah + (+(function(){ var scope; return "4"; })());


답변

따라서 짧은 대답은 함수 결과를 여러 가지 방식으로 사용하여 구문 오류를 방지한다는 것입니다.

void연산자 를 사용하여 반환 값에 관심이 없다고 엔진에 지시 할 수도 있습니다 .

void function() { console.log("Foo!"); }();

물론 전체를 중괄호로 묶는 것도 그 목적에 도움이됩니다.


답변