Қафолатҳо дар JavaScript
Биёд акнун мафҳуми қафолат (closure)-ро омӯзем. Дар асл шумо аллакай бо ин мафҳум ошноӣ доред, танҳо бояд истилоҳоти дурустро бидонед.
Пас, қафолат - функсияест, ки бо ҳамаи тағирёбандаҳои беруна, ки ба он дастрасанд. Ё, бо дигар калимаҳо, қафолат - функсияест, ки бо муҳити лексикии худ.
Дар JavaScript аксар вақт, вақте ки "қафолати функсия" мегӯянд, мақсад худи он функсия нест, балки ҳамон тағирёбандаҳои берунии он аст. Агар кадоме функсия тағирёбандаеро аз муҳити лексикии худ гирад, пас мегӯянд "тағирёбанда аз қафолат гирифта мешавад".
Кодеро, ки мо дар дарси гузашта сохтем, ба ёд орем:
function test() {
let num = 1;
return function() {
console.log(num);
}
}
let func = test();
func(); // 1-ро чоп мекунад
Дар ин ҳолат метавон гуфт, ки функсияи
func арзиши тағирёбандаи
num-ро аз қафолат мегирад. Инчунин метавон гуфт,
ки функсияи func арзиши тағирёбандаи
num-ро дар қафолат нигоҳ медорад.