Változó ütközések a JavaScript-ben

Tegyük fel, hogy van egy index.html HTML oldalunk, amelyen a script tagben létrehozunk egy str változót és kiírjuk a képernyőre:

index.html<html>
  <head>
    <script>
      let str = 'script text';
      alert(str); // kiírja 'script text'
    </script>
  </head>
  <body>
    ...
  </body>
</html>

Tegyük fel, hogy van egy script.js fájlunk is, amelyben szintén megadunk egy str változót:

script.jslet str = 'file text';

Tegyük fel most, hogy a script.js fájlunkat a következőképpen csatoljuk a index.html oldalhoz:

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

Mivel a str változó megtalálható mind a index.html fájlban, mind a script.js fájlban, ütközés fog bekövetkezni, amelyben az a változó nyer, amelyik alul van írva, azaz a script.js fájlból származó változó. Vagyis a kódunk 'file text'-t fog kiírni, és nem 'script text'-t, ahogy elvárnánk.

A probléma valójában nagyon komoly. Egy valós weboldalon esetünkben gyakran több szerkesztési fájl is lesz, emellett csatolni fogunk különféle harmadik féltől származó bővítményeket. Ebben az esetben az egyik fájl változói és függvényei ütközhetnek egy másik fájl változóival és függvényeivel.