Computer >> Máy Tính >  >> Lập trình >> Javascript

Ô nhiễm không gian tên toàn cầu trong JavaScript là gì?

Ô nhiễm không gian tên toàn cầu

Gây ô nhiễm Không gian tên toàn cầu gây ra xung đột tên . Xung đột tên này rất phổ biến trong các dự án lớn, nơi chúng tôi có thể đang sử dụng một số javascript các thư viện. Hãy thảo luận chi tiết về thế nào là va chạm tên là.

Chúng ta hãy xem một tình huống trong đó 2 nhóm có tên A1 và A2 đang làm việc trong một dự án. Cả hai đều chuẩn bị tệp javascript của riêng mình là TeamA1.js TeamA2.js như hình bên dưới.

TeamA1.js

ĐộiA1 đã tạo một hàm sinh viên và có 2 tham số fname và lname (firstname &lastname).

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

TeamA2.js

ĐộiA2 đã tạo cùng một hàm (sinh viên) và có 3 tham số fname, mname, lname.

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

Bây giờ hãy tạo một tệp html để vận hành các tệp js trên. Đặt các tệp js vào thẻ

Tệp 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>

Nếu chúng tôi chạy mã, kết quả sau sẽ được hiển thị.

Đầu ra

Rajendra prasad undefined

Giải thích

Chúng ta có ở đây hai hàm sinh viên, một là với 2 tham số và một là với 3 tham số. Mục đích của chúng tôi là sử dụng hàm sinh viên với 2 tham số, vì vậy trong tệp html chỉ có hai tham số ("Rajendra", "prasad") đã vượt qua. Nhưng đầu ra mà chúng tôi nhận được là "Rajendra prasad undefined", có nghĩa là đoạn mã đã sử dụng một hàm có 3 tham số chứ không phải hàm có 2 tham số.

Lý do đằng sau điều này là javascript sẽ không khuyến khích quá tải hàm . Nó chỉ ghi đè hàm với một hàm khác trùng tên (Đây là học sinh). Trong ví dụ của chúng tôi, vì hàm có 3 tham số (TeamA2.js) đã được đặt sau hàm có 2 tham số (TeamA1.js), TeamA2 chức năng đã ghi đè TeamA1 chức năng, hiển thị không xác định trong đầu ra. Trong trường hợp nếu vị trí của hai tệp js đã đảo ngược vị trí tương ứng của chúng thì kết quả đầu ra sẽ là "Rajendra prasad".

Ở đây chúng ta có thể nói rằng xung đột tên đã xảy ra. Cả hai nhóm đã xây dựng một chức năng có cùng tên là sinh viên. Đó là lý do tại sao điều rất quan trọng là không thêm mọi thứ vào không gian tên chung. Nếu ai đó sử dụng cùng một biến hoặc tên hàm, điều đó có thể dẫn đến xung đột tên .