Контекст през променлива в 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 на инпута. Въпреки това, поради някаква причина при загуба на фокус в конзолата се появява грешка. Поправете грешката на автора на кода. Напишете текст, в който да дадете обяснение на автора на кода, защо възникнала неговата грешка.