2011-10-26 3 views
2

나는 이것을 읽으면 $ 기호를 사용하는 다른 라이브러리와의 충돌을 피할 수 있다고 읽었습니다.

(function($) { 
    // jQuery code 
})(jQuery) 

누군가 나에게 설명해 주시겠습니까?

답변

4

$이라는 인수로 익명 함수를 정의합니다. 그런 다음 즉시 jQuery 객체 (그 이름이 다른 라이브러리 객체의 이름과 충돌하지 않을 정도로 명시적임)를 사용하여 객체를 호출합니다.

익명 함수 (모든 jQuery 코드가있는 곳)의 범위 내에서 $jQuery 개체를 나타냅니다. 따라서 모두가 행복합니다. 편리한 코드를 사용하면 코드가 $이고 나중에 코드는 $을 자신의 비즈니스에 사용할 수 있습니다.

0

$는 jQuery 오브젝트를 나타냅니다 :

당신은 여전히 ​​당신은 더 많은 읽을 수 있습니다 여기에

jQuery.noConflict(); 

를 호출해야합니다. 다른 라이브러리는 $을 사용하여 개체를 나타냅니다. 따라서 jQuery 플러그인을로드하면 잘못된 $ 객체를 변경하려고 할 수 있습니다.

이 작업을 우회하는 jQuery.noConflict()를 사용할 수 있습니다 http://api.jquery.com/jQuery.noConflict/

0

예, $를 사용하여 (예를 들어, 프로토 타입) 다른 도서관을 방해 할 수 있습니다.

코드 스니 j은 직접 함수를 정의한 후 jQuery을 매개 변수로 전달합니다. (jQuery은 jQuery의 최상위 객체이며, 충돌이없는 경우는 $입니다.)

jQuery은 함수의 $ 매개 변수에 바인딩됩니다. JavaScript 함수는 자체 범위를 작성하므로 함수 매개 변수 (및 var으로 선언 된 지역 변수)는 동일한 전역 변수를 "대체"합니다.

$의 값은 jQuery에 바인드 된 매개 변수이며 함수의 지속 시간 동안 충돌이 없음을 나타냅니다.

1

또한 jQuery.noconflict을 사용해야합니다.

일반적으로 jQuery를 사용하면 $이라는 전역 함수가 정의됩니다. jQuery는 다른 라이브러리에서 정의한 $ 함수와 마찬가지로 이전 값인 $을 기억합니다.

noconflict을 호출하면 jQuery는 이전 (기억 된) 값 $을 복원합니다. 하지만 이제는 $을 사용하여 jQuery를 사용할 수 없습니다. 함수 이름 jQuery 만 사용할 수 있지만 그게 더 장황합니다. 여기서 질문에 언급 된 코드가 들어갑니다.

그 코드를 사용하면 $의 값을 대체하지 않고 정의중인 익명 함수의 범위에서 jQuery를 호출 할 때 $을 사용할 수 있습니다. 함수는 로컬 변수와 매개 변수에 대해 별도의 범위 또는 네임 스페이스를 만듭니다. 당신이 게시 코드는 동일합니다 :

function init() { 
    var $ = window.jQuery; 
    // do stuff with $ 
} 
init(); 

는 DOM이 $에 매개 변수로 전달하고 준비가되었을 때 콜백이 호출하는 등의 초기화 함수를 등록하는 일반적인 바로 가기 :

$(function() { 
    // code 
}); 

라이브러리 충돌을 방지해야 할 때 두 개의 익명 함수를 중첩하지 않으려면 jQuery 함수가이 콜백의 매개 변수로 전달되므로 다음과 같이 할 수 있습니다.

jQuery(function($) { 
    // $ is jQuery here 
}); 
관련 문제