Ինֆորմացիոն փոխանակման արբիտրաժի հակասություններ JavaScript-ում
Ենթադրենք, մենք ունենք HTML էջ index.html,
որի script թեգում դուք ստեղծում եք
str փոփոխականը և արտածում եք այն էկրանին.
<html>
<head>
<script>
let str = 'script text';
alert(str); // կարտածի 'script text'
</script>
</head>
<body>
...
</body>
</html>
Ենթադրենք, մենք նաև ունենք script.js ֆայլը,
որտեղ նույնպես սահմանված է str փոփոխականը.
let str = 'file text';
Ենթադրենք, այժմ մեր script.js ֆայլը
միացված է index.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:
Խնդիրն իրականում շատ լուրջ է: Իրական կայքում ամենից հաճախ դուք կունենաք մի քանի ֆայլեր ձեր սցենարներով, բացի այդ, դուք կմիացնեք որոշ երրորդ կողմի պլագիններ: Այս դեպքում մի ֆայլի փոփոխականներն ու ֆունկցիաները կարող են հակասել մեկ այլ ֆայլի փոփոխականների և ֆունկցիաների հետ: