2012-10-11 2 views
0

함수와 개체가 전역 범위에 있고 함수 호출이있는 몇 개의 큰 js 파일이 있습니다. 로컬 범위에 두는 비교적 쉬운 방법이 있습니까?범위 아래에 여러 .js 파일 넣기

<script src="fileA.js"></script> 
<script src="fileB.js"></script> 
<script src="fileC.js"></script> 

나는 마지막의 끝에하여 파일의 시작과 })();(function(){을 퍼팅 시도했지만 작동하지 않습니다.

10x의 친절한 도움 BR

답변

2

아니요, 없습니까?

가장 가까운 사용자는 window.YOUR_SCRIPT_NAME = {}과 같이 네임 스페이스 (충돌 가능성이 거의없는 단일 전역 변수)를 통해 변수를 공유하도록 설정할 수 있습니다.

2

각 스크립트는 여전히 개별적으로 구문 분석되므로이 내용을 감쌀 수 없습니다 (내용을 파일에 포함하면 <script> 태그가 작동하지 않습니다).

파일을 수동으로 연결할 수 있으며 전체 내용에 function(){ ... }()을 넣고이 새로 연결된 스크립트를 단일 단위로 사용할 수 있습니다.

스크립트 내용을 다시 작성할 수있는 경우 다른 대답에서 언급 한 Quentin과 같은 팩토리 메서드에서 지정된 공유 범위를 사용할 수 있습니다. 그러나 더 나은 솔루션 (재 작성 가능하고 더 큰 프로젝트 인 경우)은 AMD과 같은 종속성을 가진 전체 모듈 개념으로 전환하는 것이 좋습니다.

+0

10x 그들은 도움이됩니다. AMD의 경우 이미 큰 프로젝트 였으므로이 솔루션을 이미 염두에두고 있었으며이 경우에는 효과가 없을 것입니다. 귀하의 친절한 도움을 감사하십시오 – kidwon

1

스크립트 src = "fileA.js"를 사용하는 대신 Ajax를 사용하여 fileA.js의 내용을 문자열로 가져올 수 있습니다. 로컬 범위에 대한 평가보다.

eval.call(yourlocalscope, string) 
+0

이 방법이 효과가 있지만 파일이 서로 종속되어 있고 순서대로 실행해야하는 경우에는 훨씬 복잡합니다. 또한 디버깅이 더 어려워진다. (일부 브라우저 만 지원하는 일부 마법의'// @ source' 주석을 사용하여 평가 된 문자열에 이름을 부여하지 않는 한). 어쨌든 비동기 적으로로드하려면 require.js 또는 다른 모든 것을 처리 한 다른 것으로 전환하는 것이 좋습니다. –

+0

감사합니다. 내 경우에 도움이되는 해결책 +1입니다. 상대적으로 고통스럽고 쉬운 것을 찾고있었습니다. – kidwon