Ошибка в коде: не видит переменную(вроде)

195
10 января 2020, 05:20
var displayOfAll = document.getElementById("displayOfAll");
var playButton = document.getElementById("playButton");
var playButtonShadow = document.getElementById("playButtonShadow");
var playButtonPosX = 300;
var playButtonPosY = 350;
var playButtonMovingUpPosY = 350;
var playButtonHeightWhenMovingUp = 100;
var playButtonFontSize = 500;
var moneyNum = 0;
var addMoneyButtonPlus = '+';
var moneyToAdd = 1;
function Play() {
playButton.style.left = playButtonPosX+"px";
playButton.style.top = playButtonPosY+"px";
displayOfAll.removeChild(playButtonShadow);
if (playButtonMovingUpPosY <= 350) {
    var moveUp = setInterval(function movingUp() {
        if (playButtonMovingUpPosY <= 100) {
            if (playButtonMovingUpPosY <= 0) {
            clearInterval(moveUp);
            displayOfAll.removeChild(playButton);
            Main();
            }
            playButtonHeightWhenMovingUp -= 2;
            playButton.style.height = playButtonHeightWhenMovingUp+"px";
            playButtonMovingUpPosY -= 2;
            playButton.style.top = playButtonMovingUpPosY+"px";
            if (playButtonFontSize <=  300) {
                if (playButtonFontSize <= 0) {
                    playButtonFontSize = 0;
                } else {
                    playButtonFontSize -= 300;
                    playButton.style.fontSize = playButtonFontSize+"%";
                }
            } else {
                playButtonFontSize -= 5;
                playButton.style.fontSize = playButtonFontSize+"%";
            }
        } else {
            playButtonMovingUpPosY -= 2;
            playButton.style.top = playButtonMovingUpPosY+"px";
        }
    }, 1)
}
}
function Main() {
var moneyDiv = document.createElement("div");
moneyDiv.style = "margin:0px;padding:0px;position:absolute;height:100px;width:200px;background-color:green;font-size:500%;text-align:center;top:100px;left:275px;z-index:10;";
displayOfAll.appendChild(moneyDiv);
moneyDiv.innerHTML = "0";
var addMoneyButton = document.createElement("div");
addMoneyButton.style = "margin:0px;padding:0px;position:absolute;height:100px;width:200px;background-color:green;font-size:500%;text-align:center;top:500px;left:275px;z-index:10;";
addMoneyButton.innerHTML = addMoneyButtonPlus;
addMoneyButton.onclick = addMoney;
displayOfAll.appendChild(addMoneyButton);
}
function addMoney() {
moneyNum += moneyToAdd;
moneyDiv.innerHTML = moneyNum;
}

В предпоследней строчке("moneyDiv.innerHTML = moneyNum;") браузерный редактор выдаёт ошибку "Uncaught ReferenceError: moneyDiv is not defined at HTMLDivElement.addMoney" Что тут не так? Почему он не видит переменную??

Answer 1

Переменная должна быть в области видимости функции addMoney, а сейчас она находится в function Main()

Переместите объявление переменной

var moneyDiv;

в самое начало скрипта, например, а внутри функции Main() уже ее необходимо инициализировать:

function Main(){
    moneyDiv = document.createElement("div");
    .....
}

После этих телодвижений функция addMoney будет видеть переменную moneyDiv

PS: когда функция получает доступ к переменной, определенной вне неё, а выше по областям видимости - это называется замыкание closure подробнее про замыкания можно почитать тут

READ ALSO
Не работает get-запрос

Не работает get-запрос

Необходимо получить json данные с сайта но с помощью $get получить данные не получается , по причине отсутствия заголовка CORS Хотя и получается...

173
Выборочный вывод данных из json

Выборочный вывод данных из json

проблема состоит в том что у меня в jsone есть два одинокавых данных, но нужно вывести одну

147
Событие по созданию div в body

Событие по созданию div в body

Подскажите, пожалуйстаКак можно отследить создание div по определённому классу в body, чтобы в дальнейшем работать с объектом div и его содержимым?

157
Подключение приложения Xamarin к базе данных SQL

Подключение приложения Xamarin к базе данных SQL

имеется приложение на Aspnet Core mvc, с базой данных, которая создана при помощи sql server, взаимодействие с базой данных происходит при помощи Entity...

148