은 내가 본 적이 : 정확히 어떻게 function() {}()이 작동합니까?
!function(){ //code }();
즉시 익명 함수를 실행하기 위해 여러 장소에 사용된다.
!
실제로 기능을 실행하게 방법을 알고
(function(){ //code }())
사람 : 일반적으로, 그것은 대신에 사용되는?
은 내가 본 적이 : 정확히 어떻게 function() {}()이 작동합니까?
!function(){ //code }();
즉시 익명 함수를 실행하기 위해 여러 장소에 사용된다.
!
실제로 기능을 실행하게 방법을 알고
(function(){ //code }())
사람 : 일반적으로, 그것은 대신에 사용되는?
무엇을! 당신이 !
사용하는 경우, 함수가 단항 (논리) NOT 연산자의 하나의 값이된다
않습니다.
이렇게하면 함수가 표현식으로 평가되어 강제로 인라인 될 수 있습니다.
다른 대안
당신은 단지에 대한 연산자를 사용하여이 작업을 수행 할 수 있습니다. 다음은 몇 가지 예입니다 ...
좋은 점은 연산자의 의미가 과부하가 아니라는 점입니다.
당신이 기능의 주위에 ()
사용하는 경우, 당신이 그들을 분리하는 세미콜론없이 당신이있는 경우 행에 하나 이상을 잘라 몇 가지 버그를 칠 수 ()
의 문제 .
(function() {
alert('first');
}())
(function() {
alert('second');
}())
// TypeError: undefined is not a function
제 함수 주위 외측 ()
한 쌍의 함수 호출하려는 것으로 해석되기 때문은 TypeError
될 것이다. 첫 번째 함수는 물론 함수를 반환하지 않으므로 undefined
에 전화하려고합니다. 다른 연산자를 사용하는 대처 (또는 방지)하는 방법
문제
에도 어느 정도 오버로드 +
같은 연산자는 오류가 발생하지 않습니다.
이렇게하면 ...
+function() {
alert('first');
}()
+function() {
alert('second');
}()
제 +
NaN
변환 도착
undefined
첫 번째 함수에서 반환 된 결과를 변환한다.
제 +
undefined
인 제 2 함수의 리턴 결과
NaN
를 추가 할 것이다.
결과는 물론 NaN
이지만 무해합니다. 오류를 발생시키는 불법 코드는 없습니다. 운영자가
이를 증명하기 위해 기능과 상호 작용하는 방법의
데모, 그냥 ... 각 다음, 반환 값을 기능을 콘솔에 붙여 줄
+function() {
alert('first');
return "10";
}()
+function() {
alert('second');
return 20;
}()
// 30
두 개의 alert
이 표시되고 콘솔에 30
이 표시됩니다. +
연산자가 Stri ng "10"
을 10
으로 변경하고 두 번째 +
을 두 결과를 함께 추가합니다.
!
은 일반적인 논리적 부정입니다.
()
이 기능을 실행합니다.
나는 왜 OP가 단순히'!'를'function() {// code}()'(그렇지 않으면 에러) 앞에 붙이면 익명의 함수가 실행되는지를 묻고있다. – toddsundsted
앞의 코드는 작동하지만 두 번째 형식은 반환하지 않는 반면 함수는 반환 한 값을 무효화합니다. – toddsundsted
세미콜론으로 문장을 종료하는 대신 왜 이것을 사용합니까? 그것은 여전히 한 문자입니다. – js1568