Айнымалы арқылы контекст JavaScript-те

Шешуі мынадай: сыртқы функцияда this-ті кез келген айнымалыға жазамыз және бұл айнымалы ішкі функцияда қолжетімді болады, барлық айнымалылар сияқты (әдетте бұл айнымалы self деп аталады). Осылайша біз this-ті сыртқы функциядан ішкі функцияға береміз:

javascript"use strict";

let elem = document.querySelector('#elem');
elem.addEventListener('blur', parent);

function parent() {
  console.log(this.value); // 'text' шығарады
  
  let self = this; // this-ті кез келген айнымалыға жазамыз, мысалы, self-ке
  
  function child() {
    console.log(self.value); // 'text' шығарады
  }
  child();
}
Задание 1

Мынадай код берілген делік:

html<input id="elem" value="3">
javascript"use strict";

let elem = document.querySelector('#elem');
elem.addEventListener('blur', func);

function func() {
  alert( square() );
  
  function square() {
    return this.value * this.value;
  }
}

Код авторы инпуттың value-ындағы санның квадраты экранға шығуын қалаған. Алайда, фокус жоғалған кезде консольде қате шығады. Код авторының қатесін түзетіңіз. Код авторына оның қатесінің неге пайда болғанын түсіндіретін мәтінді жазыңыз.