fb pixel
გამოიწერე YouTube-ის არხიyoutube logoგამოწერა
val-do.com-ის ლოგო
კურსებიბლოგიხ.დ.კ.წესებიკონტაქტიკონვერტორები

კურსებიბლოგიხ.დ.კ.წესებიკონტაქტიკონვერტორები
შესვლა
  1. მთავარი
  2. კურსები
  3. ჯავასკრიპტის კურსი
  4. JavaScript-ის closures-ები
JavaScript-ის closures-ები

JavaScript-ის closures-ები

Closure-ები არის ჯავასკრიპტის ფუნქციები, რომლებიც იმახსოვრებენ მოცემული ფუნქციის გარე ბლოკის ცვლადებს (outer scope) მიუხედავად იმისა, შესრულდა თუ არა გარე ბლოკის ფუნქცია.

Closure იქმნება მაშინ, როდესაც ფუნქცია აღწერილია სხვა ფუნქციის შიგნით.

მაგალითი 1:

function outerFunction() {
    let outerVariable = 'I am from the outer function';

    function innerFunction() {
        console.log(outerVariable); // Accessing outerVariable
    }

    return innerFunction;
}

const closureFunction = outerFunction(); // outerFunction returns innerFunction
closureFunction(); 
// Output: I am from the outer function

მოცემულ მაგალითში გვაქვს გარე ფუნქცია სახელად outerFunction() ხოლო ამ ფუნქციის ბლოკში გვაქვს კიდევ ერთი ფუნქცია აღწერილი, რომლის სახელიცაა innerFunction(), ასევე outerFunction()-ში გვაქვს აღერილი ცვლადი სახელად outerVariable.

მიუხედავად იმისა, რომ innerFunction()-ში არ გვაქვს არანაირი ცვლადი მას შესაძლებლობა აქვს მისწვდეს მშობელი outerFunction()-ის ბლოკში არსებულ ცვლადებს და შესაბამისად გამოვიყენოთ ისინი.

მაგალითი 2:

function createCounter() {
    let count = 0;

    return function() {
        count++; // შიდა ფუნქცია უკეთებს მოდიფიკაციას count ცვლადს, რომელიც აღწერილია მისი მშობელი ფუნქციის ბლოკში
        return count;
    };
}

const counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3

მოცემული მაგალითის მიხედვით ასევე შესაძლებლობა გვაქვს count ცვლადის ცვლილების შიდა ფუნქციაში, ასევე როდესაც counter-ს ვანიჭებთ ფუნქციას createCounter() და გამოვიძახებთ რამდენჯერმე, დავინახავთ, რომ count ცვლადი ინახავს მის წინა მნიშნველობას, შესაბამისად ყოველ გამოძახებაზე count ცვლადი გაიზრდება 1-ით.

რეალური მაგალითები closure-ებზე

მოვიყვანოთ რეალური მაგალითი, სადაც count ცვლადი აღწერილი გვაქვს ე.წ. გლობალურ ბლოკში (global scope)

let count = 0; // გლობალური ცვლადი

function createCounter() {
    return function() {
        count++;
        return count;
    };
}

const counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2
count = 42; // შემთხვევითი მოდიფიკაცია
console.log(counter()); // 43

თუ დავაკვირდებით count ცვლადს შემთხევით შესაძლოა მივანიჭოთ რაიმე არასასურველი მნიშვნელობა, რაც გამოიწვევს შედეგის შეცვლას.

რატომ უნდა გამოვიყენოთ closure-ები ჯავასკრიპტში?

  1. თავიდან ვიცილებთ გლობალური ბლოკის დაბინძურებას (global scope)
    • მაგალით 2-ში count ცვლადი მიუწვდომელია გლობალური ბლოკიდან (global scope)
  2. ენკაფსულაცია
    • ჩვენ შეგვიძლია ლოკალურად ავღწეროთ ცვლადები
  3. უსაფრთხოება
    • ე.წ. პრივატული ცვლადებით მანიპულაცია შეგვიძლია ზუსტად ისე, როგორც ჩვენ ლოკალურად ფუნქციის ბლოკში გვაქვს აღწერილი და ვიზღვევთ თავს შეცდომებისგან

მოცემული მაგალითებით შევეცადე მარტივად ამეხსნა თუ რა არის closure ჯავსკრიპტში და რაში შეიძლება მათი გამოყენება.


კურსში შემავალი თემები

🔗 js🔗 javascript

დამატებითი რესურსები

  • Telegram
  • Discord

სხვა კატეგორიები

შეისწავლეთ ვებდეველოპმენტის ენები სრულიად უფასოდ, ისეთები როგორებიცაა Javascript, HTML, CSS და კიდევ სხვა მრავალი ენა

HTML, CSS-ის სა...

HTML, CSS-ის საწყისი კურსი, დამწყებთათვის (deprecated - მოძველებული)

ჯავასკრიპტის კუ...

ჯავასკრიპტის კურსი

JavaScript-ის D...

JavaScript-ის DOM-ის კურსი

TypeScript-ის კ...

TypeScript-ის კურსი

Angular-ის კურს...

Angular-ის კურსი

HTML, CSS-ის კუ...

HTML, CSS-ის კურსი

Reactjs-ის კურს...

Reactjs-ის კურსი დამწყებთათვის

ალგორითმები...

ალგორითმები

Node.js-ის კურს...

Node.js-ის კურსი

Dart-ის კურსი...

Dart-ის კურსი

C პროგრამირების...

C პროგრამირების ენის საფუძვლები

ბოლოს დაწერილი ბლოგები პროგრამირებაზე

ქვემოთ მოცემულია უახლესი 3 ბლოგი პროგრამირების თემატიკასთან დაკავშირებით

როგორ ინახება ი...

როგორ ინახება ინფორმაცია. რა არის Bit და Byte?

რატომ არის კომფ...

რატომ არის კომფორტული სამუშაო ოთახი აუცილებელი კოდის წერისა და პროდუქტიული მუშაობისთვის?

რატომ ვერ პოულო...

რატომ ვერ პოულობენ ჯუნიორები სამსახურს?

  • რა არის ჯავასკრიპტი (javascript)?
  • ცვლადები ჯავასკრიპტში (JavaScript variables)
  • JavaScript-ის მონაცემთა ტიპები string, number
  • JavaScript-ის კომენტარები
  • JavaScript-ის მონაცემთა ტიპი ობეიქტი (object)
  • JavaScript-ის მონაცემთა ტიპი მასივი (Array)
  • JavaScript-ის ფუნქცია, როგორ მუშაობს ის?
  • JavaScript-ის ანონიმური ფუნცქცია
  • JavaScript-ის arrow function
  • JavaScript-ის მონაცემთა ტიპი boolean
  • JavaScript-ის შედარებითი და ლოგიკური ოპერატორები
  • JavaScript-ის პირობითი ოპერატორები, if() else if() else
  • JavaScript-ის switch ოპერატორი
  • JavaScript-ის for ციკლი (loop)
  • JavaScript-ის for...in ციკლი
  • JavaScript-ის for...of ციკლი
  • JavaScript-ის while და do while ციკლები
  • JavaScript-ის break და continue ოპერატორები
  • JavaScript-ის foreach ციკლი
  • JavaScript-ის სახელების შეთანხმებები
  • JavaScript-ის მეთოდი vs ფუნქცია
  • JavaScript-ის Set მეთოდი
  • JavaScript-ის კლასები, ნაწილი პირველი
  • რა არის ჯეისონი (JSON)
  • JavaScript-ის კლასები, ნაწილი მეორე
  • JavaScript-ის მოდულები
  • ობიექტის დესტრუქტურიზაცია (object destructuring)
  • რა არის callback ფუნქცია ჯავასკრიპტში
  • ჯავასკრიპტის მასივის მეთოდები, ნაწილი პირველი
  • ჯავასკრიპტის მასივის მეთოდები, ნაწილი მეორე
  • ჯავასკრიპტის filter() მეთოდი
  • ასინქრონული ჯავასკრიპტი, JavaScript Promises
  • async await, ასინქრონული ჯავასკრიპტი
  • fetch api ჯავასკრიპტში
  • მასივის map() მეთოდი
  • მასივის reduce() მეთოდი
  • localStorage ჯავასკრიპტში
  • Spread ოპერატორი ჯავასკრიპტში
  • rest ოპერატორი ჯავასკრიპტის ფუნქციაში
  • რა არის indexOf() მეთოდი ჯავასკრიპტში?
  • რა არის charAt() მეთოდი ჯავასკრიპტში?
  • რა არის push() მეთოდი ჯავასკრიპტში?
  • რა არის pop() მეთოდი ჯავასკრიპტში?
  • რა არის unshift() მეთოდი ჯავასკრიპტში?
  • რა არის shift() მეთოდი ჯავასკრიპტში?
  • Ternary ოპერატორი ჯავასკრიპტში (JavaScript)
  • JavaScript-ის bitwise (ბიტვაიზ) ოპერატორები
  • Nullish Coalescing Operator (??) ჯავასკრიპტში ქართულად
  • JavaScript-ის პრიმიტიული ტიპები (Primitive types)
  • პრიმიტიული და რეფერენს ტიპების შედარება
  • JavaScript-ის closures-ები
  • JSDocs - დოკუმენტაციის წერა ჯავასკრიპტში
პროგრამირების კურსები
HTML, CSSJavaScriptTypeScriptAngularReactJSNodeJSC
გამომყევი
InstagramFacebookLinkedinTelegramDiscordYoutubeGithub

© val-do.com 2026 წელი - ყველა უფლება დაცულია

ვერსია 0.1.52