Кантэкст праз зменную ў JavaScript

Рашэнне наступнае: у знешняй функцыі запiшам 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; // запiшам 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 інпута. Аднак, чамусьці пры страце фокуса ў кансоль выдаецца памылка. Выпраўце памылку аўтара кода. Напішыце тэкст, у якім вы дасце тлумачэнне аўтару кода, чаму ўзнікла яго памылка.