글로벌 네임스페이스 오염
글로벌 네임스페이스를 오염시키면 이름 충돌이 발생합니다. . 이 이름 충돌 여러 자바스크립트 를 사용할 수 있는 대규모 프로젝트에서 매우 일반적입니다. 도서관. 이름 충돌이 무엇인지 자세히 논의해 보겠습니다. 입니다.
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"가 됩니다.
여기서 우리는 이름 충돌이라고 말할 수 있습니다. 그것이 일어났다. 두 팀 모두 학생이라는 동일한 이름으로 함수를 구성했습니다. 그렇기 때문에 전역 네임스페이스에 모든 것을 추가하지 않는 것이 매우 중요합니다. 다른 사람이 동일한 변수 또는 함수 이름을 사용하는 경우 이름 충돌이 발생할 수 있습니다. .