Замыканні ў JavaScript

Давайце цяпер вывучым паняцце замыканне (closure). На самой справе вы ўжо знаёмыя з гэтым паняццем, засталося толькі даведацца правільную тэрміналогію.

Такім чынам, замыканне - гэта функцыя разам з усімі знешнімі зменнымі, якія ёй даступныя. Ці, іншымі словамі, замыканне - гэта функцыя разам са сваім лексічным атачэннем.

У JavaScript часцей за ўсё, кажучы "замыканне функцыі", маюць на ўвазе не саму гэтую функцыю, а менавіта яе знешнія зменныя. Калі ж якая-небудзь функцыя атрымлівае зменную са свайго лексічнага атачэння, то кажуць "зменная бярэцца з замыкання".

Успомнім код, які мы зрабілі ў папярэднім уроку:

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

let func = test();
func(); // выведзе 1

У даным выпадку і можна сказаць, што функцыя func атрымлівае значэнне зменнай num з замыкання. Таксама можна сказаць, што функцыя func захоўвае значэнне зменнай num у замыканні.