IIFE හි ආරක්ෂිත ලෙස කාලය ලකුණ භාවිතා කිරීම
දැන් අපගේ ක්රියාත්මක වන ශ්රිතය ආරම්භයේ plus ලකුණක් නොමැතිව, round වරහනෙන් වටකර ඇති ආකාරයට යොදා ගනිමු, මේ වගේ:
(function() {
console.log(1); // 1 ප්රතිදානය කරයි
})();
num විචල්යය ශ්රිතයෙන් පිටත
ප්රකාශයට පත් කර ඇතැයි සිතමු:
let num = 1; // කාලය ලකුණ යෙදී ඇත
(function() {
console.log(num); // 1 ප්රතිදානය කරයි
})();
දැන් අපි කාලය ලකුණ යොදන අමතක කළා යැයි සිතමු:
let num = 1
(function() {
console.log(num); //!! දෝෂයක් ඇති කරයි
})();
මෙම කේතය දෝෂයක් ඇති කරනු ඇත, එයට හේතුව JavaScript අපගේ ශ්රිතය පළමු පේළියේ විධානයේ අඛණ්ඩ කොටසක් ලෙස ගනී.
මෙවැනි ගැටලු වළක්වා ගැනීම සඳහා, ක්රියාත්මක වන ශ්රිතයක් ක්රියාත්මක කිරීමට පෙර සෑම විටම කාලය ලකුණක් යොදන්න, මේ ආකාරයට:
let num = 1
;(function() {
console.log(num); // 1 ප්රතිදානය කරයි
})();
ගැටලුව තරමක් කෘතිම බව පෙනේ. ඇත්ත වශයෙන්ම, එය එසේ නොවේ. ඔබගේ පිටුවට වෙනස් ගොනු වලින් බහු ස්ක්රිප්ට් සම්බන්ධ කර ඇති අවස්ථාවක් සිදු විය හැකිය. මෙම අවස්ථාවේදී එක් ගොනුවක අවසානයේ කාලය ලකුණක් අඩු වී ඇති නම්, දෙවන ගොනුව ක්රියාත්මක වන ශ්රිතයකින් ආරම්භ වේ නම්, එය ස්වයංක්රීයව ගැටලුවක් ඇති කරයි.
එබැවින්, ක්රියාත්මක වන ශ්රිතයක් ක්රියාත්මක කිරීමට පෙර සෑම විටම කාලය ලකුණක් යොදන්න, ඔබට දැනට ගැටලු නොමැති බවට විශ්වාසයක් ඇතත්. ඒවා පසුව ඇති විය හැකිය.
ඉහත කියූ දේ යොදා ගෙන ක්රියාත්මක වන ශ්රිතයක් ක්රියාත්මක කරමු, ආරම්භයේදී කාලය ලකුණක් යෙදමින්:
;(function() {
console.log(1); // 1 ප්රතිදානය කරයි
})();
කේතය ක්රියාත්මක නොකර, කොන්සෝලයේ ප්රතිදානය කරන්නේ කුමක්දැයි තීරණය කරන්න:
let str = 'str';
(function() {
console.log(1);
})();
කේතය ක්රියාත්මක නොකර, කොන්සෝලයේ ප්රතිදානය කරන්නේ කුමක්දැයි තීරණය කරන්න:
let str = 'str'
(function() {
console.log(1);
})();