JavaScriptda o'zgaruvchilar nizosi

Faraz qilaylik, bizda index.html HTML sahifasi bor, unda script tegi ichida siz str o'zgaruvchisini yaratasiz va uni ekranga chiqarasiz:

index.html<html>
  <head>
    <script>
      let str = 'script matni';
      alert(str); // 'script matni' chiqadi
    </script>
  </head>
  <body>
    ...
  </body>
</html>

Faraz qilaylik, bizda shuningdek script.js fayli bor, unda ham str o'zgaruvchisi belgilanadi:

script.jslet str = 'fayl matni';

Endi faraz qilaylik, bizning script.js faylimiz index.html sahifasiga quyidagicha ulangan:

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

str o'zgaruvchisi ham index.html faylida, ham script.js faylida mavjud bo'lgani uchun, nizo kelib chiqadi, bunda pastroqda yozilgan o'zgaruvchi, ya'ni script.js faylidagi o'zgaruvchi g'alaba qozonadi. Ya'ni bizning kodimiz 'fayl matni' ni chiqaradi, biz kutayotgan 'script matni' ni emas.

Muammo aslida juda jiddiy. Haqiqiy saytda ko'pincha sizda bir nechta skript fayllari bo'ladi, bundan tashqari, siz ba'zi third-party plaginlarni ulaysiz. Bunday holatda bir faylning o'zgaruvchilari va funksiyalari boshqa faylning o'zgaruvchilari va funksiyalari bilan nizo kelitirishi mumkin.