나는 즉시 호출 된 함수에 대한 정보를 찾고 있었고 어딘가 에서이 표기법을 발견했습니다.
+function(){console.log("Something.")}()
누군가 +
가 기능 앞에 있는 표시가 무엇을 의미 하는지 설명 할 수 있습니까 ?
나는 즉시 호출 된 함수에 대한 정보를 찾고 있었고 어딘가 에서이 표기법을 발견했습니다.
+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"; })());
(+function() { ... })()
표기 (이 질문에 대답하지 않는다는 사실에서 떨어져) 오류없이 실행되지 않을 수 있습니다.
3++function...
, 동일하지 않은 공백을 제거합니다 .
+function...
그 자체로는 불필요합니다. blah + function( ){ ... }( );
랩핑 브래킷의 필요성을 무효화하는 동일한 결과를 얻을 수 있습니다 .
따라서 짧은 대답은 함수 결과를 여러 가지 방식으로 사용하여 구문 오류를 방지한다는 것입니다.
void
연산자 를 사용하여 반환 값에 관심이 없다고 엔진에 지시 할 수도 있습니다 .
void function() { console.log("Foo!"); }();
물론 전체를 중괄호로 묶는 것도 그 목적에 도움이됩니다.