JQuery 익명 함수 초기 인식
5850 단어 jquery
(function(){
// jQuery
})();
반년 전에 jQuery를 처음 만났을 때, 나도 다른 사람들처럼 원본이 어떤 것인지 흥분해서 보고 싶었다.그러나 원본 코드를 처음 봤을 때 나는 어리둥절했다.왜 익명 함수 하나만 실행을 보지 못했습니까? (당연히 실행했지...) jQuery 같은 함수 라이브러리가 있을 수 있습니까?그래서 나는 의문을 품고 CSDN에 왔다.결과적으로 지금 많은 사람들이 잘 알고 있을 거라고 믿는다.익명 함수가 묶인 다음에 괄호를 넣으면 이 익명 함수는 즉시 실행될 수 있습니다.정말 신기하다!
헤헤!소란은 여기까지.이 절에서 우리가 만났던 jQuery 세션은 바로 실행되는 익명 함수입니다.이런 용법은 논단에서도 격론을 불러일으켰다. 이 코드는 도대체 클로즈업에 속하는 것입니까?이 의문을 가지고 우리는 기초부터 시작하여 모든 관건적인 요소를 분석하고 자신만의 답안을 찾는다.(맞아, 내 대답! 내가 보기에 모든 이론은 형식일 뿐이다. 우리의 응용 실현에 유리하기만 하면 취할 수 있는 것이다. 검은 고양이, 흰 고양이, 쥐를 잡는 것은 좋은 고양이다!)
익명 함수를 말하자면, 우리는 우선 함수 자체부터 말해야 한다.함수는 다음과 같이 정의됩니다.
함수는 입력마다 고유한 출력 값을 지정하는 법칙입니다.
물론 이것은 수학상의 정의일 뿐이다.그러나 컴퓨터 프로그래밍 언어에서 함수의 정의도 십중팔구이다.컴퓨터의 함수도 수학 정의의 설명과 유사하다는 것을 우리는 알고 있다. 입력한 몇몇 데이터를 코드가 설정한 논리적 조작 처리를 거쳐 유일한 출력의 코드 조합 블록으로 되돌려주는 것이다.물론 입력한 데이터가 비어 있거나 출력된 데이터가 비어 있거나 둘 다 비어 있다.
다음은 익명 함수와 관련된 개념을 초보적으로 알아보자.
function abc(){
// code to process
}
물론, 너의 함수도 매개 변수를 가지고 있을 수도 있고, 심지어는 되돌아오는 값을 가지고 있을 수도 있다.
function abc(x,y){
return x+y;
}
그러나 JS 해석기는 함수를 어떻게 정의하든지 Function 대상으로 번역합니다.예를 들어, 위의 예제 중 하나를 정의하는 함수 번호에 다음 코드를 입력합니다.
alert(typeof abc);// "function"
브라우저에서 abc가 Function 대상이라는 알림 상자를 팝업합니다.그렇다면 펀션 대상은 과연 무엇일까?
var abc = new Function("x","y","return x*y;");
alert(abc(2,3)); // "6"
여러분들은 이제 함수를 어떻게 성명하는지에 대해 어느 정도 알고 계실 거라고 믿습니다.그럼 뭐가 익명 함수인가요?
alert(typeof function(){});// "function"
alert(typeof function(x,y){return x+y;});// "function"
alert(typeof new Function("x","y","return x*y;"))// "function"
우리는 그것들이 모두 Function 대상이라는 것을 쉽게 볼 수 있다. 다시 말하면, 그들은 모두 함수이지만, 그들은 모두 이름이 없다는 특징을 가지고 있다.그래서 우리는 그들을 '익명 함수' 라고 부른다.그러나 그들이 이름이 없기 때문에 우리도 그들을 찾을 방법이 없다.이것은 어떻게 익명 함수를 호출하는지에 대한 문제를 설명한다.
var abc=function(x,y){
return x+y;
}
alert(abc(2,3)); // "5"
위의 조작은 사실 다른 방식으로 함수를 정의하는 것과 같다. 이런 용법은 우리가 비교적 자주 만나는 것이다.예를 들어 DOM 요소 이벤트 처리 함수를 설정할 때, 우리는 보통 그들에게 이름을 정하지 않고, 그에 대응하는 이벤트에 익명 함수를 인용한다.
익명 함수에 대한 호출은 우리가 본 jQuery 세션 () 을 사용하여 익명 함수를 묶은 다음, 그 다음에 작은 괄호 (파라미터 목록 포함) 를 추가하는 방법도 있다.다음 예를 살펴보겠습니다.
alert((function(x,y){return x+y;})(2,3));// "5"
alert((new Function("x","y","return x*y;"))(2,3));// "6"
많은 사람들이 이상할지도 모르지만, 왜 이런 방법이 성공적으로 사용될 수 있을까?이 앱이 이상하다고 생각하는 사람은 아래의 설명을 보세요.
소괄호의 역할을 아시나요?작은 괄호는 우리의 표현식을 조합하여 블록을 나눌 수 있고, 각 블록, 즉 한 쌍의 작은 괄호마다 되돌아오는 값이 있다.이 반환값은 사실상 소괄호에서 표현식의 반환값이다.그래서 우리가 한 쌍의 작은 괄호로 익명 함수를 묶을 때 실제로는 작은 괄호가 되돌아오는 것이 바로 익명 함수의Function 대상이다.따라서 소괄호 쌍에 익명 함수를 더하면 이름이 있는 함수처럼 인용 위치를 얻을 수 있다.그래서 이 인용 변수 뒤에 매개 변수 목록을 더하면 일반 함수의 호출 형식을 실현할 수 있다.
이상의 글로 여러분들이 알아볼 수 있을지 모르겠습니다. 만약 이해가 안 된다면 아래의 코드를 다시 한 번 보십시오.
var abc=function(x,y){return x+y;};// abc
// abc constructor constructor 。 , 。
alert((abc).constructor==(function(x,y){return x+y;}).constructor);
PS:constructor는 객체를 작성하는 함수입니다.즉 함수 대상이 대표하는 함수체다.
한 마디로 하면, 이를 괄호에 포함된 익명 함수) 괄호 표현식이 되돌아오는 함수 대상으로 이해하고, 이 함수 대상을 정상적인 매개 변수 목록으로 호출할 수 있다.(앞에서 오류가 발생했습니다. 함수 표현식만 함수를 직접 호출할 수 없습니다. 익명 함수 괄호를 제거하려면 표현식에 값을 부여해야 합니다. 즉 (function () {alert (1)} () () 는 a=function () {alert (1)} () 와 같은 값이어야 하며 a=도 제거할 수 없습니다.)
어때요?보아하니 땀이 나겠지... 괜찮아, 나도.더 간단한 방법으로 설명하자면 클립은 사실 언어 특성이다. 이것은 프로그램 설계 언어에서 함수를 대상으로 간주하고 대상에서의 조작을 함수에 옮겨서 실례(국부) 변수를 정의할 수 있는 것을 말한다. 이런 변수는 함수에 함수의 실례 대상이 소각될 때까지 저장할 수 있다.다른 코드 블록은 어떤 방식으로 이 실례 (국부) 변수의 값을 가져와 응용 확장을 할 수 있다.
이렇게 재해석한 후에 더욱 뚜렷해질지 모르겠습니다. 만약 아직도 이해하지 못한다면, 클립은 프로그램 언어에서 코드가 실행된 함수에서 정의한 국부 변수를 호출할 수 있도록 하는 것을 말합니다.
이제 예를 살펴보겠습니다.
var abc=function(y){
var x=y;//
return function(){
alert(x++);// x,
alert(y--);//
}}(5);//
abc();// "5" "5"
abc();// "6" "4"
abc();// "7" "3"
alert(x);// !“x” !
여기를 보면 도대체 jQuery의 코드 세션이 닫혔는지 판단할 수 있습니까?
내 이해로는패킷 기능이 적용되었는지 여부는 이 단락 코드에 가장 중요한 요소가 있는지 확인해야 한다. 즉, 소각되지 않은 국부 변수이다.어떤 실현된 익명 함수도 패키지 기능을 적용할 수 없다는 것은 명백하다.그런데 익명 함수에 실현이 있다면?그것도 그것의 실현에 소각되지 않은 국부 변수가 사용되었는지 확인해야 한다.그래서 만약에 그 개편 중의 jQuery 코드 세션이 JS의 어떤 특성을 응용했는지 물어보면?그러면 그것은 단지 익명 함수와 익명 함수의 호출일 뿐이다.그러나 클로즈업의 특성을 내포하고 수시로 클로즈업 응용을 실현할 수 있다.왜냐하면 JS는 천성적으로 이런 특성이 있거든요!(이것은 단지 나의 이해일 뿐이다. 나도 너의 이해를 알고 싶다. 교류를 환영한다! 클로즈업에 관해서는 기회가 있으면 독립적으로 주제를 하나 더 열어라!)
이전에 잘못을 이해했을 때, CSDN 여러분의 질문에 대답할 때 저지른 잘못된 대답에 대해 사과드립니다--Sorry...
이 노트는 jQuery를 통학할 때 인용한 JS 지식을 정리한 것이기 때문에 진정한 JS와 학습이 엇갈릴 수 있으니 JS를 처음 배우는 사람은 기초 서적을 먼저 보도록 권장합니다.그러나 다음 몇 장은 모두 JS의 기초에 대한 정리일 것이다. 이 편을 읽기 어려운 학생들은 먼저 뒤의 장과 절을 볼 수 있다.감사합니다
from natineprince 칼럼
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
jQuery 전후 예이 기사에서는 jquery after() 및 before() 메소드의 예를 볼 것입니다. before() 메서드는 선택한 요소 앞에 지정된 콘텐츠를 삽입합니다. after() 메서드는 선택한 요소 뒤에 지정된 콘텐츠...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.