JavaScript да модуллардаги ўзгарувчи ва функцияларни экспорт қилиш: closure орқали

Баъзан модулнинг айрим ўзгарувчи ва функцияларини ташқарида қўллаш талаб этилиши мумкин. Буни қандай қилишни кўриб чиқайлик. Бизда куйидаги модул бор деб фараз қилайлик:

javascript;(function() {
  let str = 'модулнинг ўзгарувчиси';
  
  function func() {
    alert('модулнинг функцияси');
  }
})();

Келинг, бизнинг func функциямизни экспорт қилайлик. Бунинг учун уни браузердаги ўрнатилган window объектининг хусусиятига ёзамиз:

javascript;(function() {
  let str = 'модулнинг ўзгарувчиси';
  
  function func() {
    alert('модулнинг функцияси');
  }
  
  window.func = func;
})();

Энди биз модул ташқарида функциямизни чақира оламиз:

javascript;(function() {
  let str = 'модулнинг ўзгарувчиси';
  
  function func() {
    alert('модулнинг функцияси');
  }
  
  window.func = func;
})();

window.func(); // 'модулнинг функцияси' чиқади

Бунда функцияни window объектининг хусусияти сифатида чақириш шарт эмас:

javascript;(function() {
  let str = 'модулнинг ўзгарувчиси';
  
  function func() {
    alert('модулнинг функцияси');
  }
  
  window.func = func;
})();

func(); // 'модулнинг функцияси' чиқади
Задание 1

Куйидаги модул берилган:

javascript;(function() {
  let str1 = 'модулнинг ўзгарувчиси';
  let str2 = 'модулнинг ўзгарувчиси';
  let str3 = 'модулнинг ўзгарувчиси';
  
  function func1() {
    alert('модулнинг функцияси');
  }
  function func2() {
    alert('модулнинг функцияси');
  }
  function func3() {
    alert('модулнинг функцияси');
  }
})();

Битта ўзгарувчи ва иккита ихтиёрий функцияни ташқарига экспорт қилинг.