2012-08-24 2 views
2

나는 다음과 같은 코드를 가지고 : 함수가 객체 $의 .modal에게 주어진 그냥 모달되지 않는 이유

(function ($) { 
    /** 
    * Opens a new modal window 
    * @param object options an object with any of the following options 
    * @return object the jQuery object of the new window 
    */ 
    $.modal = function (options) { 
     var settings = $.extend({}, $.modal.defaults, options), 
      root = getModalDiv(), 

누군가가 설명 할 수 있습니까? 또한 첫 번째 줄의 중요성은 무엇입니까?

+9

그것을, 그들은 "$"의 jQuery를 네임 스페이스를 withing에 실행하도록 정의하고 JQuery와 플러그인이기 때문입니다. – meagar

+1

@meagar : 사람들은 항상 이런 상황에서이 말을 계속하고 있습니다. 이것은 답변입니다. –

+0

글쎄요. ok ... then – meagar

답변

7

jQuery 플러그인이기 때문에 jQuery 네임 스페이스를 $으로 실행하도록 정의하고 있습니다.

0

그것이 modal에 액세스 할 수의 외부 closure ((function(){})()) 코드입니다 때문에. 또는 당신이 좋아 그것을 할 수 :

var holder = {}; 

(function($){ 
    holder.modal = function() 
    }; 
})(); 

holder.modal(); 
+1

물론 할 수 있습니다 -'modal = function() {}'. 'var'이 없으면'모달'이 전역 적으로 사용 가능할 것입니다. – josh3736

+0

이것은 클로저와 아무 관련이 없습니다. 함수는 클로저인지 여부에 관계없이 ** 로컬 **이므로 로컬 변수는 함수 외부에서 액세스 할 수 없습니다. '(function() {})()'은 즉시 실행되는 함수 표현 *입니다. 그리고 여러분 말이 맞습니다. 함수 자체는 클로저이지만 모든 사용자 정의 함수도 마찬가지입니다. –

+0

josh3736의 덧글을 확장하려면'modal = function() {}'을 타이핑하면됩니다. 이는 window.model = function() {}을 타이핑하는 것과 동일하며, 전역 적으로 사용할 수 있습니다. 'var'없이 선언 된 변수는'window' 객체 (또는 여러분의 JS 환경이 실행중인 전역 컨텍스트)에 암시 적으로 첨부됩니다. Felix가 말했듯이이 질문은 클로저와 관련이 없으며 전역 객체 대신 jQuery 객체에 jQuery 플러그인을 바인딩하는 것과 관련이 있습니다. – meagar

관련 문제