Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript의 전역 네임스페이스 오염이란 무엇입니까?

<시간/>

글로벌 네임스페이스 오염

글로벌 네임스페이스를 오염시키면 이름 충돌이 발생합니다. . 이 이름 충돌 여러 자바스크립트 를 사용할 수 있는 대규모 프로젝트에서 매우 일반적입니다. 도서관. 이름 충돌이 무엇인지 자세히 논의해 보겠습니다. 입니다.

A1과 A2라는 두 팀이 프로젝트를 진행하고 있다고 가정해 보겠습니다. 둘 다 TeamA1.js인 자체 자바스크립트 파일을 준비했습니다. 및 TeamA2.js 아래와 같습니다.

TeamA1.js

TeamA1 학생 함수를 만들고 fname 및 lname(이름 및 성) 매개변수 2개가 있습니다.

function student(fname, lname){
   this.fname = fname;
   this.lname = lname;
   this.getFullName = function (){
      return this.fname + " " + this.lname
   }
}

TeamA2.js

TeamA2 동일한 함수(student)를 생성했으며 fname, mname, lname 매개변수가 3개 있습니다.

function student(fname, mname, lname){
   this.fname = fname;
   this.mname = mname;
   this.lname = lname;
  this.getFullName = function (){
      return this.fname + " " + this.mname + " " + this.lname;
   }
}

이제 위의 js 파일을 동작시킬 html 파일을 생성합니다. js 파일을 태그

에 넣습니다.

HTML 파일

<html>
<head>
<script type = "javascript" src = "TeamA1.js"></script>
<script type = "javascript" src = "TeamA2.js"></script>
</head>
<body>
   <div id = "resultDiv"></div>
   <script>
      document.getElementById("resultDiv").innerHTML =
      new student("Rajendra", "prasad").getFullName();
   </script>
</body>
</html>

코드를 실행하면 다음 출력이 표시됩니다.

출력

Rajendra prasad undefined

설명

여기에 두 개의 학생 함수가 있습니다. 하나는 2개의 매개변수가 있고 다른 하나는 3개의 매개변수가 있습니다. 우리의 목표는 2개의 매개변수가 있는 학생 함수를 사용하는 것이므로 html 파일 두 개의 매개변수("Rajendra", "prasad")만 전달되었습니다. 그러나 우리가 얻은 출력은 "Rajendra prasad undefined"이며, 이는 코드가 2개의 매개변수가 있는 함수가 아닌 3개의 매개변수를 가진 함수를 취했음을 의미합니다.

그 이유는 자바스크립트가 함수 오버로딩을 권장하지 않기 때문입니다. . 재정의 같은 이름을 가진 다른 함수가 있는 함수(여기서는 학생입니다). 이 예에서는 3개의 매개변수(TeamA2.js)가 있는 함수가 2개의 매개변수(TeamA1.js)가 있는 함수 뒤에 위치하므로 TeamA2 함수가 TeamA1을 재정의했습니다. 함수, 정의되지 않음 표시 출력에서. 두 js 파일의 위치가 각각의 위치를 ​​바꾼 경우 출력은 "Rajendra prasad"가 됩니다.

여기서 우리는 이름 충돌이라고 말할 수 있습니다. 그것이 일어났다. 두 팀 모두 학생이라는 동일한 이름으로 함수를 구성했습니다. 그렇기 때문에 전역 네임스페이스에 모든 것을 추가하지 않는 것이 매우 중요합니다. 다른 사람이 동일한 변수 또는 함수 이름을 사용하는 경우 이름 충돌이 발생할 수 있습니다. .