2013-02-27 2 views
0

아래 JavaScript 코드가 있습니다.자바 공용 변수/메소드

var foo = (function() { 
    //Private vars 
    var a = 1; 

    return { 
     //Public vars/methods 
     a: a, 
     changeVar: function() { 
      a = 2; 
     } 
    } 
})(); 

는 지금은 공공 바르/방법에 대한 구문이 어떻게 작동하는지 확실하지 않다? 바르/방법을 "반환하는"방법으로 공개로 만들 수 있습니까?

감사합니다.

+0

선언 된 변수'a'를 공개하지 않습니다. 같은 이름의 속성을 가진 객체를 반환하고 동일한 값으로 설정했습니다. 'changeVar'를 실행하면 원래 변수가 아닌 속성이 변경됩니다. – Archer

답변

1

변수 foo의 값은 실제로이 함수가 반환하는 값입니다. 마지막 줄인 ()에 주목하십시오.이 기능은 즉시 평가됩니다. 함수를 평가하고 반환 값을 변수에 할당하면 해당 범위 외부에서 액세스 할 수 없도록 로컬 (함수) 범위 내에서 변수를 숨길 수 있습니다. 반환 된 객체의 멤버 만 액세스 할 수 있지만 내부 함수가 모두 외부 범위와 함께 닫히기 때문에 여전히 로컬 (숨겨진) 변수를 사용할 수 있습니다.

이의 예는 일부 지역의 상태를 숨기기 만하는 방법을 통해 그것에 접근 할 수 있도록 할 것입니다 : 당신은 객체 것을 의미한다 익명 함수에서 객체를 반환했습니다

var foo = (function() { 
    //Private vars 
    var a = 1; 

    return { 
     //Public methods 
     getVar: function() { 
      return a; 
     }, 
     setVar: function (val) { 
      a = val; 
     } 
    } 
})(); 
0

좋아요를 foo에 할당됩니다. 따라서 foo.a 또는 foo.changeVar과 같은 객체의 속성에 액세스 할 수 있지만 함수의 범위 내에서 계속 개인 변수를 사용할 수 있습니다. 더 구체적인 질문 없이는 많은 도움을 줄 수 없습니다.

+0

Thx a lot ... 두 번째 부분에 대해 자세히 설명해주십시오 ... "하지만 함수의 범위 내에서 개인 변수를 계속 사용할 수 있습니다." – testndtv

+0

위의 질문을 참조 할 수 있습니까? – testndtv

관련 문제