ՋավաՍկրիպտում փակումները
Եկեք այժմ ուսումնասիրենք փակում հասկացությունը (closure): Փաստորեն, դուք արդեն ծանոթ եք այս հասկացությանը, մնացել է միայն ճիշտ տերմինաբանությունը իմանալ:
Այսպիսով, փակումը ֆունկցիա է իր բոլոր արտաքին փոփոխականների հետ, որոնք նրան հասանելի են: Կամ, այլ կերպ ասած, փակումը ֆունկցիա է իր լեքսիկական միջավայրի հետ միասին:
ՋավաՍկրիպտում ամենից հաճախ, "ֆունկցիայի փակում" ասելով, նկատի չեն ունենում հենց այդ ֆունկցիան, այլ հենց դրա արտաքին փոփոխականները: Եթե ինչ-որ ֆունկցիա ստանում է փոփոխական իր լեքսիկական միջավայրից, ապա ասում են "փոփոխականը վերցվում է փակումից":
Հիշենք նախորդ դասում մեր գրած կոդը.
function test() {
let num = 1;
return function() {
console.log(num);
}
}
let func = test();
func(); // կարտածի 1
Այս դեպքում կարելի է ասել, որ func ֆունկցիան
ստանում է num փոփոխականի արժեքը
փակումից: Նաև կարելի է ասել,
որ func ֆունկցիան պահում է num փոփոխականի
արժեքը փակումում: