Контекст кроз променљиву у 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 уносног поља. Међутим, из неког разлога при губитку фокуса у конзоли се појављује грешка. Исправите грешку аутора кода. Напишите текст у ком ћете објаснити аутору кода зашто је настала његова грешка.