Javascript에서 함수를 정의하는 방법은 일반적으로 세 가지가 있습니다.
<code>function fnMethodName(x){alert(x);}</code>
<code>var fnMethodName = function(x){alert(x);}</code>
<code>var fnMethodName = new Function('x','alert(x);')</code>
위의 세 가지 메소드는 동일한 메소드 함수 fnMethodName을 정의합니다. 첫 번째 메소드는 가장 일반적으로 사용되는 메소드입니다. 후자의 두 메소드는 함수를 fnMethodName 변수에 복사하며 이 함수에는 이름이 없습니다. 실제로 상당수의 언어에는 익명 기능이 있습니다.
<code>var f = function fact(x) { if (x < = 1) return 1; else return x*fact(x-1); };</code>
<code>var y = "global"; function constructFunction() { var y = "local"; return new Function("return y"); <span>// 无法获取局部变量</span> } alert(constructFunction()()); <span>// 输出 "global"</span> </code>
Function 키워드 정의에 비해 Function() 생성자는 고유한 특성이 있고 사용하기가 훨씬 어렵기 때문에 이 기술은 일반적으로 거의 사용되지 않습니다. 함수 리터럴 표현식은 함수 키워드 정의와 매우 유사합니다. 이전 차이점을 고려하면 OS X 10.4.3의 일부 웹킷 엔진에서 리터럴 익명 함수에 버그가 있다는 소식이 있지만 일반적으로 우리가 참조하는 익명 함수는 함수 리터럴 형식의 익명 함수를 나타냅니다. 자세한 내용은 "JavaScript: The Definitive Guide, 5th Edition"의 함수 장을 참조하세요.
어제hedger wang이 자신의 블로그에 여러 익명 함수 코드 패턴을 소개했습니다.
오류 모드: 작동하지 않으며 브라우저에서 구문 오류를 보고합니다.
<code>function(){ alert(1); }();</code>
<code>(function(){ alert(1); } ) ( );</code>
<code>( function(){ alert(2); } ( ) );</code>
<code>void function(){ alert(3); }()</code>
이 세 가지 방법은 동일합니다. Hedge Wang은 개인적인 이유로 세 번째 방법을 선호하지만 실제로 적용해본 결과는 첫 번째 방법입니다.