2012-11-02 2 views
0

나는 며칠 전에 비슷한 질문을하지만 난 여전히 뭔가 잘못하고 것 같아, 그래서이 하나 더 초점을 맞추고 :내 기능이 공개 된 이유는 무엇입니까?

지금까지 내가 이해하고 this book에 따라, 기능 privateFunction이 예정대로

mySingleton 개체 외부에서 사용할 수 없으므로 publicFunction은이 방법으로 만 호출 할 수 있습니다 (mySingleton.publicFunction).

그러나 private-function은 내 의지와 의도에 대해 개체 외부에서 사용할 수 있습니다.

왜 그럴까요? 내가 도대체 ​​뭘 잘못하고있는 겁니까?

var mySingleton = new (function (window, document, undefined) { 

      var privateFunction = function() { 
       //code 
      }, 

      mySingleton = { 
       publicFunction: function() { 
        //code 
       } 
      }; 

     return mySingleton; 
    })(window, document, undefined); 

편집 : 방금 문제가 발견되었습니다. 구문 오류, 얼마나 모욕적입니다.

var mySingleton = new (function (window, document, undefined) { 
     var self = this; 

     privateFunction = function() { 
      //code 
     }, 

     mySingleton = { 
      publicFunction: function() { 
       //code 
      } 
     } 

     return mySingleton ; 
    })(window, document, undefined); 

"다시"쉼표와 세미콜론 민간 방법은 개인하게 교체 : 내가 게시 할 때 나는 지난 밤이 줄을 놓쳤다 라인 2에 세미콜론을 살펴보십시오. 그럼에도 불구하고이 코드를 보면 구문 오류가 발생할 수 있습니다. privateFunction 바로 뒤에 오는 쉼표로 인해이 오류가 발생합니다.

+5

브라우저에서 실행 중이십니까? 공개적으로 생각하는 예를 보여줄 수 있습니까? –

+0

JavaScript에서 실제로 private 함수가 필요한 이유를 실제로 이해하지 못합니다 ... – azz

+3

@Der - 공용 함수의 일부가 아닌 내부 메커니즘이 있기 때문에 어디서나 private 함수가 필요합니다. . – Malvolio

답변

0

이런 종류의 코드를 본 적이 있습니까?

var toto = 'titi', 
    titi = 'tata', 
    tata = 'toto'; 

이것은 여러 배정입니다. 따라서 매번 var 키워드를 재사용 할 수 없습니다. 그러나 var 키워드를 사용하지 않으므로 privateMethod은 실제로 전역 범위로 유출됩니다. 그 나쁜.

var mySingleton = function() { 
    function privateMethod() {} 

    return { 
     publicMethod: function() {} 
    }; 
}(); 

window, documentundefined 쓰레기가 필요하지 않습니다 :

난 당신이 패턴을 찾고 생각합니다.

+0

나는 함수 내에서 정의 된 모든 변수가 그 함수의 범위에 있다고 생각했다. 편집 : slebetman 위의 의견이 질문에 대답했다. – pilau

+0

윈도우, 문서 및 정의되지 않은 매개 변수가 불필요한 이유는 무엇입니까? – pilau

+0

@pilau 매개 변수 : http://james.padolsey.com/javascript/iife-argument-madness/ –

관련 문제