ՋավաՍկրիպտում փակումները

Եկեք այժմ ուսումնասիրենք փակում հասկացությունը (closure): Փաստորեն, դուք արդեն ծանոթ եք այս հասկացությանը, մնացել է միայն ճիշտ տերմինաբանությունը իմանալ:

Այսպիսով, փակումը ֆունկցիա է իր բոլոր արտաքին փոփոխականների հետ, որոնք նրան հասանելի են: Կամ, այլ կերպ ասած, փակումը ֆունկցիա է իր լեքսիկական միջավայրի հետ միասին:

ՋավաՍկրիպտում ամենից հաճախ, "ֆունկցիայի փակում" ասելով, նկատի չեն ունենում հենց այդ ֆունկցիան, այլ հենց դրա արտաքին փոփոխականները: Եթե ինչ-որ ֆունկցիա ստանում է փոփոխական իր լեքսիկական միջավայրից, ապա ասում են "փոփոխականը վերցվում է փակումից":

Հիշենք նախորդ դասում մեր գրած կոդը.

javascriptfunction test() {
  let num = 1;
  
  return function() {
    console.log(num);
  }
}

let func = test();
func(); // կարտածի 1

Այս դեպքում կարելի է ասել, որ func ֆունկցիան ստանում է num փոփոխականի արժեքը փակումից: Նաև կարելի է ասել, որ func ֆունկցիան պահում է num փոփոխականի արժեքը փակումում: