2

전 세계적이라고 생각되는 변수의 범위를 이해하는 데 어려움이 있습니다.
모든 것을 알아 내기보다는 내 자신의 글로벌 네임 스페이스를 선언하고 거기에 물건을 보관하는 것이 더 나을 것이라고 생각했습니다.
이 방법입니까?Meteor에서 전역 변수에 대한 고유 한 네임 스페이스를 만들려면 어떻게해야합니까?

클라이언트/main.js

MyNamespace = {}; 

클라이언트 /는 some_other_file.js

MyNamespace.greeting = 'hello world'; 
+1

가능한 [Meteor의 lib/constants.js 파일에서 상수에 액세스하는 방법은 무엇입니까?] (http://stackoverflow.com/questions/26836390/how-can-i-access-constants-in-the -lib-constants-js-file-in-meteor) –

답변

2

는 그래, 그것을 할 권장되는 방법입니다. 예제와 같은 네임 스페이스를 사용하면 다음 두 가지가 제공됩니다.

  • 변수를 공통 이름으로 논리적으로 그룹화합니다.
  • 전역 개체에 연결된 변수의 총 수를 최소화합니다.

로드 순서는주의해야합니다. 선언문을 lib 또는 패키지에 넣는 것이 더 합리적 일 수 있습니다.

사이드 노트 - 이것은 본질적으로 package export과 같은 것입니다.

0

이 자바 스크립트에서 네임 스페이스를 정의 (유성)에 대한 더 나은 :

MyNamespace = (typeof MyNamespace === 'undefined')? {} : MyNamespace; 

불행하게도 그것은 추한 괴물 (구문)입니다. 네임 스페이스가 Javascript에서 곧 지원 될 것입니다 (어쩌면 클래스 및 모듈과 함께).

그것은 당신의 변수를 추가보다 당신은 파일의 시작 부분에 배치 할 수 있습니다

사용.

파일 MyNamespace/greeting.js :

MyNamespace = (typeof MyNamespace === 'undefined')? {} : MyNamespace; 

MyNamespace.greeting = 'hello world'; 
// ... 

파일 MyNamespace/myFunction.js 예를 들어

MyNamespace = (typeof MyNamespace === 'undefined')? {} : MyNamespace; 

MyNamespace.myFunction = function() { 
    // ... 
} 

MyNamespace = {}; 잘못 무엇입니까?

요점은 두 개 이상의 파일에 정의 된 네임 스페이스가있는 경우 (즉, Meteor와 같은 환경에서 다중 js 파일로 코드 분할을 시작하면 가능성이 있음을 나타냅니다.) MyNamespace = {}; last에로드 될 파일은 이전 파일에있는 모든 정의를 겹쳐 씁니다.

파일 /client/controllers/HomeController :

Controllers = {}; // define namespace Controllers 

Controllers.HomeController = ... 
    // ... 

파일 /client/controllers/LoginController : 예를 들어

유성와

Controllers = {}; // define namespace Controllers 

Controllers.LoginController = ... 
    // ... 

, LoginController은 알파벳 순서에 대해 마지막으로로드되고 명령 Controllers = {};HomeController을 지 웁니다 정의가 손실됩니다.

위의 해결책으로 문제가 해결됩니다.

관련 문제