고대인들은 "사람에게 물고기를 가르치는 것보다 물고기 잡는 법을 가르치는 것이 낫다"고 말했습니다. 선생님이 없으면 혼자서만 "낚시"를 배울 수 있습니다. 간단하게 시작해 볼까요!
가장 친숙한 코드는 다음과 같은데 왜 이렇게 작성했는지 아시나요? 페이지에 몇 줄의 코드를 추가하는 이유는 무엇입니까? jQuery 개체가 이미 도입되었습니다.
이제부터 시작하겠습니다! 프로그래머는 모두 Google과 Baidu를 사용할 수 있는 방법을 알고 있습니다. 나도... 오! 이는 자바스크립트의 익명 기능인 것으로 밝혀졌습니다.
자바스크립트에서는 일반적으로 함수를 정의하는 세 가지 방법이 있습니다.
위의 세 가지 메서드는 동일한 함수 Name을 정의합니다. 첫 번째 메서드는 가장 일반적으로 사용되는 메서드입니다. 두 함수에는 이름이 없습니다. 소위 익명 함수인가요? 아래 설명을 참고하세요!
(1) 함수 리터럴은 익명 함수이며 구문을 통해 재귀 함수를 작성할 때 직접 호출할 수 있지만 Function() 생성자를 사용하면 그렇지 않습니다.
(4) Function() 생성자를 사용하여 함수를 생성하면 일반적인 범위를 따르지 않습니다. 항상 최상위 함수로 실행됩니다.
익명 함수에 이어 이름에서 알 수 있듯이 익명 함수는 실제 이름이 없는 함수입니다. 예를 들어 위의 예를 들어보겠습니다. 함수 이름을 제거한 후 2와 3이 동일한 함수인지 확인합니다.
alert(typeof new Function( "a","return a;")) // "함수"
모든 반환 함수 개체입니다. 이름이 없는 것처럼 보이지만 여전히 함수입니다. 그렇다면 익명 함수를 어떻게 호출하나요?
함수를 호출하려면 해당 함수를 찾고 참조할 수 있는 방법이 있어야 합니다. 그래서 우리는 그것에 대한 이름을 찾아야 할 것입니다. 예시 2, 3에서 '이름'의 역할이 바로 이것이다. 그리고 이는 우리가 흔히 볼 수 있는 형식이기도 합니다.
여기에는 실제로 다른 방법이 있습니다. 즉, 처음에 제공된 jQuery 코드는 ()를 사용하여 익명 함수를 묶은 다음 그 뒤에 괄호 쌍(매개변수 목록 포함)을 추가하는 것입니다. 아래 코드를 살펴보겠습니다!
alert((function(x,y) {return x y ;})(2,3)); // "5"
alert((new Function("x","y","return x*y;"))(2,3)) ; // "6"
왜 이 메소드가 성공적으로 호출될 수 있는지 궁금해하는 사람들이 많을 것입니다. 아마도 바쁘지 않은 시간에 코드를 다시 보시면 이해가 되실 것입니다.
// abc에 익명 함수 개체 할당
var abc=function(x,y){return x y;};
alert((abc).constructor==(function(x,y){return x y;}).constructor); // abc 생성자는 익명 함수의 생성자와 동일합니다. 즉, 두 기능의 구현은 동일합니다.
이 애플리케이션이 여전히 이상하다고 생각된다면 온라인에서 읽은 이 설명을 살펴보세요.
괄호는 우리의 표현식 조합을 블록으로 나눌 수 있으며, 각 블록, 즉 각 괄호 쌍에는 반환 값이 있습니다. 이 반환 값은 실제로 괄호 안의 표현식의 반환 값입니다. 따라서 익명 함수를 묶기 위해 한 쌍의 괄호를 사용할 때 실제로 반환되는 것은 익명 함수의 Function 객체입니다. 따라서 괄호 쌍과 익명 함수는 명명된 함수처럼 참조됩니다. 따라서 이 참조 변수 뒤에 매개변수 목록을 추가하면 일반 함수의 호출 형식이 구현됩니다.
마지막으로 익명 함수의 코드 패턴을 살펴보겠습니다!
오류 모드: 작동하지 않으며 브라우저에서 구문 오류를 보고합니다.
function(){ 경고(1); }();
1. 함수 리터럴: 먼저 함수 개체를 선언한 다음 실행합니다.
(function(){ Alert(1); } ) ( );
2. 우선순위 표현식: 자바스크립트는 괄호 안쪽부터 바깥쪽으로 표현식을 실행하므로 괄호를 사용하여 강제로 실행할 수 있습니다. 선언된 함수 .
( function(){ Alert(2); } ( ) );
3. Void 연산자: 괄호로 묶이지 않은 단일 피연산자를 수행하려면 void 연산자를 사용하세요.
void function(){ Alert(3); }()
이 세 가지 방법은 동일하며 어떻게 생각하느냐에 따라 다릅니다.
하하! 거의 다 됐어요! 이번에는 jQuery의 처음 몇 문장이 함수 리터럴이라는 것을 깨달았습니다!
(익명 함수)(매개변수) (function($){})(jQuery);