Kontekst poprzez zmienną w JavaScript

Rozwiązanie jest następujące: w funkcji zewnętrznej zapiszemy this do dowolnej zmiennej i ta zmienna będzie dostępna w funkcji wewnętrznej, jak wszystkie zmienne (zwykle tę zmienną nazywa się self). W ten sposób przekażemy this z funkcji zewnętrznej do wewnętrznej:

javascript"use strict";

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

function parent() {
  console.log(this.value); // wypisze 'text'
  
  let self = this; // zapiszemy this w dowolnej zmiennej, na przykład w self
  
  function child() {
    console.log(self.value); // wypisze 'text'
  }
  child();
}
Задание 1

Niech będzie dany taki kod:

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;
  }
}

Autor kodu chciał, aby po utracie fokusu na ekranie wyświetlił się kwadrat liczby z value inputa. Jednakże z jakiegoś powodu po utracie fokusu w konsoli pojawia się błąd. Popraw błąd autora kodu. Napisz tekst, w którym wyjaśnisz autorowi kodu, dlaczego powstał jego błąd.