წერტილი-მძიმის უსაფრთხოება IIFE-ში
ახლა დავუშვათ, რომ ჩვენი დაუყოვნებლივ გამოსაძახებელი ფუნქცია არ იწყება პლუსით, არამედ გახვეულია მრგვალ ფრჩხილებში, ასე:
(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);
})();