2011-04-26 7 views
1

가능한 중복 : 자바 스크립트 성경에서
Why is it bad to make elements global variables in Javascript?글로벌 변수가 그리 나쁜 이유는 무엇입니까?

, 전역 변수 (이하 "VAR"키워드없이 선언 된 변수)가 매우 나쁜 일이 있다고 말한다. 좋아, Java 또는 C++ JavaScript와 같은 강력한 형식의 언어와 비교하면 스트리트 갱 속어와 같습니다 (있었습니다!).

그러나 성능에 문제가 있습니까? 아니면 브라우저가 충돌하는 것입니까? 또는 전역을 사용할 때 실제로 눈에 띄는 차이가 있습니까?

나는 독자적으로 JavaScript를 배웠고 책과 전문가의 지침을 따르지만, 이것이 왜 그렇게 중요한 주제인지 아는 것이 좋을 것입니다.

답변

1

좋은 구조화 된 접근 방식을 취하면 전역 변수는 완벽하게 수용 가능하며 실제로 다양한 포인터/변수를 복사/복사하면서 오버 헤드를 약간 줄입니다.

저에게 로컬 바를 사용하는 것은 코드를 유지 관리하고 디버그하고 다른 시스템으로 포팅하는 것이 얼마나 쉬운 지에 대한 문제입니다.

+0

단지 지역 주민을 통한 실적 향상이 없습니까? – Ibu

5

전역 변수는 의도하지 않은 부작용 (멀리있는 행동)을 가질 수 있습니다. 당신이 의도 지역 변수 i를 사용하고 var 및 다른 코드를 (그 전에 실행) 같은 짓 잊지 예를 들어

, 당신은 그 변수를 이전 값으로 사용량을 시작 . 그러면 해당 코드의 번을 번까지 던질 수 있으며 추적하기가 어려울 수 있습니다 (" 값은 어떻게 끝났습니까?").

불과 며칠 전 there was a question about a similar problem (Java의 경우)이며 개가 매우 많아 혼란이 있습니다.

변수의 범위가 넓어지면 더 이상 액세스 할 필요가 없더라도 메모리를 회수 할 수 없으므로 메모리 누수가 발생합니다.

+1

수정하십시오. 이 링크를 클릭 할 수도 있습니다. 그것은 ("글로벌 부작용"뿐만 아니라) 많은 자바 스크립트 단점과 그것들을 다루는 방법을 포함합니다. http://bonsaiden.github.com/JavaScript-Garden/#function.scopes – dmarucco

2

나는 두 가지 주요 여기에 문제가있는 말을 : 당신이 무엇을 내부에 같은 변수를 정의 할 때

가 게양 문제가 주로 나오는 외부 변수의

  • 재정 권상 하중

    • 가 믿을 수는 있지만 범위가 다르지만 if 문 중괄호 안팎에 실제로는 없습니다.

      JavaScript는 모든 변수 정의를 밀어 넣은 다음 변수가 선언되고 원래 할당 된 모든 위치에 값을 할당합니다. 이것은 눈치 채지 않고 자신 만의 전역 변수를 재정의 할 수있는 이상한 버그로 끝날 수 있습니다. (무서운 ...)

      다른 문제는 프로젝트에서 외부 라이브러리를 사용하는 경우 쉽게 정의 된 변수를 쉽게 오버라이드 할 수 있으며 결과적으로 제공 할 기능 중 일부를 잃어 버리고 (아마도 원하지 않는) 기능을 잃어 버리고 미묘한 버그가 다시 생길 수 있습니다.

      가능한 한 로컬 변수를 사용하거나 "네임 스페이스"를 사용하여이를 구분할 것을 권장합니다.

      최악의 경우 두 가지 문제에 대해 자바 스크립트는 자동으로 유지되므로 버그를 찾기 어렵습니다.

  • 관련 문제