JavaScriptда локал ҳисобловчи ўзгарувчиси

Куйидаги кодни кўриб чиқайлик:

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

test()(); // 1 ни кўрсатади
test()(); // 1 ни кўрсатади

Нега ҳар доим 1 санови чиқади? Буни tушуниш учун, коднимизни бошқача қайта ёзайлик:

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

let func1 = test(); //!! биринчи функция
func1();  //1 ни кўрсатади

let func2 = test(); //!! иккинчи функция
func2();  //1 ни кўрсатади

Яъни, test функциясини шу тарзда чақириш: test()(), ўзининг функциясини ва ўзининг тутиши (closure)ни яратади ва ўша функцияни дароқ чақиради.

Задание 1

Кодни ишлатмасдан, консолга нима чиқишини аниқланг:

javascriptfunction func() {
  let num = 0;
  
  return function() {
    console.log(num);
    num++;
  };
}

func()();
func()();
func()();
Задание 2

Кодни ишлатмасдан, консолга нима чиқишини аниқланг:

javascriptfunction func() {
  let num = 0;
  
  return function() {
    console.log(num);
    num++;
  };
}

let test = func;

test()();
test()();
test()();