2009-03-30 3 views

답변

44

그들은 closures을 이용하고 있습니다.

간략한 설명 : JS가 기능 수준 범위 지정을 사용하기 때문에 함수 내에서 일련의 작업을 수행하고 그 범위에 남아있을 수 있습니다. 전역 네임 스페이스를 사용하지 않는 코드를 호출 할 때 유용합니다. 또한 private 변수를 만들 수 있습니다. 익명 함수 내부에 변수를 선언하고 즉시 실행하면 익명 함수 내부의 다른 코드 만 해당 변수에 액세스 할 수 있습니다.

예를 들어, 전역 고유 ID 생성기를 만들고 싶다고 가정 해보십시오. 카운터

var counter = 0; 
var genId = function() 
{ 
    counter = counter + 1; 
    return counter; 
} 

그러나 지금은 누구나 할 수있는 혼란을, 그리고 지금은 두 변수 (카운터에 GenID)와 글로벌 네임 스페이스를 오염했습니다 하나는이 같은 코드를 할 수 있습니다.

대신, 내 카운터 기능을 생성하는 익명 함수를 사용할 수 있습니다

var genId = function() 
{ 
    var counter = 0; 
    var genIdImpl = function() 
    { 
     counter = counter + 1; 
     return counter; 
    } 

    return genIdImpl; 
}(); 

지금, 나는 단지 유리하다 전역 네임 스페이스에 하나 개의 변수가있다. 더욱 중요한 점은 counter 변수가 수정되지 않아 안전하다는 것입니다. 익명 함수의 범위에만 존재하기 때문에 같은 범위에 정의 된 genIdImpl 함수 만 액세스 할 수 있습니다.

YUI의 예제 코드처럼 전역 이름 공간을 전혀 오염시키지 않는 코드를 실행하려고합니다.

3

그들은 네임 스페이스 충돌을 피하기를 원합니다. JS에서 우수 사례로 보입니다.

관련 문제