2012-05-02 4 views
0

전역 변수와 함수를 사용하여 전역 네임 스페이스를 어지럽게 만드는 위험에 대해 계속 읽습니다.자바 스크립트 전역 네임 스페이스가 전체 포스트 백마다 지워 집니까?

글로벌 기능을 정의하는 '오래된'방법은 특히 동일한 프로젝트를 수행하는 여러 개발자가있는 상황에서 문제가 있다는 것을 읽었습니다.

나는 최선의 코드를 쓰고 싶지만 위의 진술은 나를 혼란스럽게한다.

개발자가 프로젝트의 동일한 페이지에서 작업하는 경우가 거의 없으며 사용자가 프로젝트의 페이지를 변경하면 전역 네임 스페이스가 지워질 것이라고 생각합니다.

이 경우가 아닙니까?

+0

이 질문의 제목이이 문제를 잘 설명하지 못한다고 제안합니다. 실제 질문에 대한 대답은 "예"이며, 네임 스페이스는 지워집니다. 그러나 문제는 왜 네임 스페이스 장치를 사용해야하는지에 관한 것입니다. 그 이유는 식별자 충돌 ("전역 네임 스페이스의 혼란")을 얻을 수 있다는 것입니다. –

+0

글쎄요, 필자는 그 필요성을 잘 알고 있습니다. 저를 염려했던 것은 제가 읽었던 기사였습니다. 필자는 글로벌 네임 스페이스가 동일한 도메인 내에서 살아있을 가능성이 있음을 암시한다고 생각했습니다.(나는 이것이 사실이라고 생각하지는 않았지만 검증을 원했다) –

답변

1

개발자가 프로젝트의 동일한 페이지에서 작업하는 경우가 거의 없으며 사용자가 프로젝트의 페이지를 변경하면 전역 네임 스페이스가 지워질 것이라고 생각합니다.

예, 글로벌 네임 스페이스는 모든 요청에서 지워지지만 전역 네임 스페이스를 오염시킬 이유는 없습니다. 당신은 같은 방에서 일하는 작은 개발자 팀에 대해 생각하는 것 같습니다. 그런데도 한 개발자가 제 3 자 라이브러리 또는 위젯을 사용하기로 결정하면 어떻게 될까요? 해당 위젯이 전역 이름 공간을 수정하면 현재의 코드를 방해 할 수 있습니다. 그렇기 때문에 글로벌 네임 스페이스에서 변수/함수를 만드는 것을 피하는 것이 가장 좋은 방법입니다.

+0

감사합니다. 이것은 완벽하게 이해할 수 있습니다. 저는 작은 팀에서만 일했고, 더 잘 아는 사람들이 제안한 것을하고 싶습니다. 나는 그 문제를 더 잘 이해하려고 노력했을 뿐이었다. –

1

이 가정 내 경험에 잘못 "거의 개발자가 프로젝트의 같은 페이지에서 작동하지 않는다". 특히 자주 사용되는 기능에 라이브러리를 사용하는 것이 좋습니다. 도서관의 핵심은 재사용이 가능하다는 것입니다. 그래서, 정의에 따르면, 도서관 저자는 "당신의"페이지에서 일하고 있습니다.

+0

AH! 나는 나의 페이지가 언급하는 도서관에서 일하는 개발자에 대해 생각하지 않았다! –

+0

글쎄, 그것은 단지 예일 뿐이다. 그럼에도 불구하고 많은 개발자가 페이지의 핵심 기능에 대해 작업합니다. –

1

은 거의 개발자가 프로젝트 이것은 매우 사실이다

의 같은 페이지에서 작동하지 않는다. 기업 웹 사이트를 유지 관리하는 과정에서 몇몇 개발자는 쉽게 고용되고 해고 될 수 있으며 사용자가 만든 동일한 페이지에서 모두 작업해야 할 수도 있습니다.

+0

어쩌면 나는 '개발자들이 같은 페이지에서 일하는 곳을 경험 한 적이 거의 없다'고 말했을 것입니다. –

1

먼저 - 페이지를 새로 고침하면 모든 자바 스크립트가 다시 초기화됩니다. 팀에 (또는 프로젝트)이 네임 스페이스 수 하나 방법이 같다 -

window.foo = 1; 

alert(foo); 

window.foo++; 

둘째 :

당신이 있었다면 그래서 window.foo을 다음 항상 각 페이지가로드되는 시간이 될 것입니다
var myCompany = {}; 

myCompany.Utils = {}; 

myCompany.Utils.doSomething = function() { 
    alert("doSomething"); 
}; 

myCompany.Utils.doSomethingElse = function() { 
    alert("doSomethingElse"); 
}; 

myCompany.Utils.doSomethingElse(); 

이것은 개발자 팀 내의 "충돌"을 막을뿐만 아니라, 그것은 또한 귀하의 코드가 귀하의 페이지에서 언급 된 제 3 자 자바 스크립트와 우연히 "충돌"하는 것을 격리시킵니다.