2012-01-21 3 views
0

이것은 부분적으로 jquery 질문이지만 대부분의 자바 스크립트입니다. 나는이 코드를 이해하기에 충분히 자바 스크립트를 잘 모른다 :함수 스 니펫에서이 javascript jquery 함수 이해하기

1 (function() { 
2   $(function() { 
3    //Global ajax progress dialog box 
4    //Simply run $("#ajax-progress-dialog").dialog("open"); script before the ajax post and 
5    //$("#ajax-progress-dialog").dialog("close"); on the ajax post complate 
6    $("#ajax-progress-dialog").dialog({ 
7     autoOpen: false, 
8     draggable: false, 
9     modal: true, 
10     height: 80, 
11     resizable: false, 
12     title: "Processing, please wait...", 
13     closeOnEscape: false, 
14     open: function() { $(".ui-dialog-titlebar-close").hide(); } // Hide close button 
15    }); 
16   }); 
17  })(); 

나는 3-15 행을 이해한다. 실제로 2 ~ 16 행을 이해할 수 있다고 생각합니다. 익명의 함수를 만들고이를 jquery 객체로 래핑하는 것입니다. 맞습니까? 왜 포장해야하는지 잘 모르겠지만 더 중요한 것은, 특히 줄 1이 "(함수"및 17 : ")()로 열린다는 것을 이해하지 못합니다. 그것에 대해 무엇입니까?

BTW, 완성도를 들어, 다음과 같이 호출되는 것을 유의하십시오.

$ ("# 아약스 진행-대화") 대화 상자 ("개방");

신용 :이 예제는 기본적으로 익명 함수를 작성하고 즉시 실행 tugberkugurlu

+0

사실, 줄 1과 줄 17은 2 줄과 16 줄과 똑같이 삭제할 수 있다고 생각합니다. 왜 두 번 넣었는지 모르겠다. – Tom

+0

정말 여러 번 묻습니다. . 구글이 '익명의 기능을 스스로 호출'한다. 내가 복제본을 찾으려고 노력하자. – Anurag

답변

1

기본적으로 자체 실행 기능으로 전역에있는 모든 것을 내부에 유지합니다. 스레드에서 설명 : What is the purpose of a self executing function in javascript?

그러나이 예제 코드에서는 필요하지 않습니다.

의 문서 준비 호출은 똑같은 작업을 수행합니다.

+0

단순히 다음과 같은 경우 어떻게 달라질까요? 어떤 변수/객체가 범위보다 큰 범위를 가져야합니까? . '$ ("# 아약스 진행-대화") 대화 상자 ({ 에 AutoOpen : 거짓, 드래그 : 거짓, 모달 : 사실, 높이 : 80, 크기 조정 : 거짓, 제목 : "처리, 기다려주십시오 ... ", closeOnEscape : false, open : function() {$ (".ui-dialog-titlebar-close "). 숨기기();} }); ' –

+0

그리고 누군가가 형식을 지정하는 방법을 설명 할 수 있다면 내 선행 주석의 코드는 그것을 고맙게 생각합니다. 나는 의사가 말한 것처럼 각 줄의 끝에 2 칸을 놓았지만, 그것은 작동하지 않았다. –

+0

위 질문에 창 범위가 없습니다. $()는 [document ready] (http://api.jquery.com/ready/)의 지름길입니다. – epascarello

1

에서 온다. 예를 들어 var x, y, z 코드를 실행하여 현재 (일반적으로 전역) 범위를 오염시키지 않고 클로저를 만드는 데 유용합니다.

0

익명 함수로 $()를 호출하면 DOM이 준비되면 지정된 익명 함수가 호출됩니다. 그것은 $ .ready()에 대한 지름길입니다. 자세한 내용은 http://api.jquery.com/ready/을 참조하십시오.

첫 번째 줄과 마지막 줄은 다른 익명의 함수를 선언 한 다음 즉시 호출하는 것입니다. 나는 그것이 왜 함수의 내용을 작성하는 것과는 다른 이유가 무엇인지 전혀 모르겠습니다.

편집 : Kolink가 맞습니다. 범위를 제한하는 데 사용됩니다. 그러나이 특정 예제에서는 이점이없는 것으로 보입니다.

0

IT는 jQuery를 특정 것은 아니지만, 그것은 폐쇄라고. 그것은 그 내부에서 사용하는 어떤 것이라도 그 클로저의 범위 안에 남아 있기 때문에 다른 곳에서 사용되는 코드와 충돌하지 않을 것입니다 (많은 스크립트 나 jQuery 플러그인을 사용할 때 중요합니다). 크롬의 JS 콘솔 (또는 방화범)를 통해

(function(document, window) { 
    var closure_test = 'Hello world!' 

    console.log(window.location.href, closure_test); 

})(document, window); 

console.log(closure_test); 

실행이, 당신은 closure_test 내부에 액세스 할 수 있는지 알 수 있습니다 :

당신은 document ready 동등 창 및 문서 매개 변수를 전달 예를 볼 수 있습니다 클로저가 아니라 그 바깥쪽에 정의되어 있지 않습니다.

샘플 코드가 실증되지 않는 많은 작업이 있습니다. 예 :를 사용하여 프로토 타입을 사용하지 않고 클래스를 모방하기 : 당신이 개인 호출 한 함수로 얻을 수있는 방법을

var exClass = (function() { 

    function private() { 
     return 'I am private'; 
    } 

    // return an object of functions or properties we want to expose 
    return { 
     public: function() { 
      return 'I am publicly accessible'; 
     } 
    } 
})(); 

console.log(exClass.public()); 
// I am publicly accessible 

console.log(exClass.private()); 
// object has no method 'private' 

console.log(private()); 
// undefined 

공지 사항,하지만 공공라는 하나를 사용할 수 있습니다().

관련 문제