Ի՞նչ է Closure-ը JavaScript-ում (շատ պարզ բացատրություն)
Closure-ը ֆունկցիա է, որը հիշում է այն փոփոխականները, որոնք սահմանվել են իր շուրջը—even եթե այդ ֆունկցիան կանչվում է ավելի ուշ։
Մտածի՛ր closure-ի մասին այսպես․
Երբ ֆունկցիա է ստեղծվում, այն «հիշում է» այն միջավայրը, որտեղ ծնվել է։ Closure-ը հենց դա է՝ այդ հիշողությունն է։
Օրինակ՝ քայլ առ քայլ
function sayHello() {
const name = "Anna";
function greet() {
console.log("Hello, " + name);
}
return greet;
}
Ի՞նչ է տեղի ունենում այստեղ
- Մենք ունենք sayHello ֆունկցիա։
- Ներսում կա name = "Anna" փոփոխական։
- Ներսում էլ կա մեկ այլ ֆունկցիա՝ greet()։
- Մենք վերադարձնում ենք greet ֆունկցիան։
Ինչպես ենք դա օգտագործում
const greeting = sayHello(); // greeting-ը հիմա նույնն է ինչ greet ֆունկցիան
greeting(); // "Hello, Anna"
Հիմա է գալիս closure-ի մոգությունը
Թեև sayHello ֆունկցիան ավարտվել է, դրա ներսի name = "Anna" արժեքը դեռ հիշվում է, որովհետև greet() ֆունկցիան closure է, և ինքը պահում է այն միջավայրը, որտեղ ստեղծվել է։
Ինչի՞ համար է closure-ը պետք
Closure-ները շատ հզոր գործիք են։ Դրանք օգնում են՝
Պահպանել տվյալները private (գաղտնի)
function createCounter() {
let count = 0;
return function () {
count++;
return count;
};
}
const counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3
Այստեղ count փոփոխականը դրսից հասանելի չէ, բայց closure-ի օգնությամբ inner function-ը կարողանում է նրան տեսնել և փոփոխել։
Հիշել փոփոխականը հետո օգտագործելու համար
function delayedMessage() {
const message = "This is a closure!";
setTimeout(function () {
console.log(message); // closure պահել է message-ը
}, 2000);
}
delayedMessage();
Կրկնենք կարևոր միտքը
Closure-ը ֆունկցիա է, որը հիշում է իր շուրջի փոփոխականները, նույնիսկ այն բանից հետո, երբ այդ փոփոխականները սահմանված ֆունկցիան ավարտվել է։