Ինֆորմացիոն փոխանակման արբիտրաժի հակասություններ JavaScript-ում

Ենթադրենք, մենք ունենք HTML էջ index.html, որի script թեգում դուք ստեղծում եք str փոփոխականը և արտածում եք այն էկրանին.

index.html<html>
  <head>
    <script>
      let str = 'script text';
      alert(str); // կարտածի 'script text'
    </script>
  </head>
  <body>
    ...
  </body>
</html>

Ենթադրենք, մենք նաև ունենք script.js ֆայլը, որտեղ նույնպես սահմանված է str փոփոխականը.

script.jslet str = 'file text';

Ենթադրենք, այժմ մեր script.js ֆայլը միացված է index.html էջին հետևյալ կերպ.

html<html>
  <head>
    <script>
      let str = 'script text';
    </script>
    <script src="script.js"></script>
    <script>
      alert(str);
    </script>
  </head>
  <body>
    ...
  </body>
</html>

Քանի որ str փոփոխականը գոյություն ունի և՛ index.html ֆայլում, և՛ script.js ֆայլում, ապա կառաջանա հակասություն, որում հաղթելու է այն փոփոխականը, որը գրված է ավելի ներքև, այսինքն՝ script.js ֆայլի փոփոխականը: Այսինքն, մեր կոդը կարտածի 'file text', և ոչ 'script text', ինչպես մենք ակնկալում were:

Խնդիրն իրականում շատ լուրջ է: Իրական կայքում ամենից հաճախ դուք կունենաք մի քանի ֆայլեր ձեր սցենարներով, բացի այդ, դուք կմիացնեք որոշ երրորդ կողմի պլագիններ: Այս դեպքում մի ֆայլի փոփոխականներն ու ֆունկցիաները կարող են հակասել մեկ այլ ֆայլի փոփոխականների և ֆունկցիաների հետ: