Передача переменной, которая находится внутри функции, в другую функцию без изменения ее значения в Javascript - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть 2 функции. Я хотел бы знать, как я могу получить переменную "foto", которая генерирует случайное число внутри функции generate (), в функцию verify (), потому что indexOf проверит число, сгенерированное наФункция generate () проверяет, находится ли это значение в одном из массивов, определенных внутри verify ().

function generate() { 

    var score = document.getElementById('score');
    var foto  =   Math.floor(Math.random() *20) + 1;
    var fotoDOM = document.querySelector('.foto');
    fotoDOM.src = 'foto-' + foto + '.jpg';
    console.log(foto);
    document.getElementById('photo').style.animation ="appearPerson 1s";
    score.innerHTML = foto; 

}

document.querySelector('.btn').addEventListener('click', verify);     

function verify() {

    var yesMeetup = [0,1,2,3,4,5,6,7,8,9,10,12,13,14,15];
    var notMeetup = [16,17,18,19,20];
    var notButton = document.getElementById('no');
    var yesButton = document.getElementById('yes');
    var decisao = document.getElementById('decisao');
    debugger

    if (yesButton) {

        if (yesMeetup.indexOf(foto) ) {
            decisao.textContent = "You got it";
        } else if (notMeetup.indexOf(foto) ) {
            decisao.textContent = "wrong";
        }
    }

    else if (notButton) {

        if (notMeetup.indexOf(foto) ) {
            decisao.textContent = "You Gou it";
        } else if (yesMeetup.indexOf(foto) ) {
            decisao.textContent = "Wrong";
        }

    }
}

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Если для функции verify требуется значение foto, то это должно быть аргументом этой функции:

document.querySelector('.btn').addEventListener('click', function() {
    var foto = generate();
    verify(foto);
});  

...

/**
 * Generate a thing.
 */
function generate() {
    ...
    return foto;
}

/**
 * Veryify the thing.
 * @param {Number} 
 */
function verify(foto) {
    ...
}

Я бы посоветовал вам максимально изолировать свои функции.так что они на самом деле не зависят от внешних переменных.Может быть, манипулирование DOM требуется внутри одного из них, но если вы можете абстрагировать эти вещи друг от друга - манипулирование DOM в 1 функции или фрагмент кода и вся другая бизнес-логика в другом наборе функций, ваш код должен быть легче читаемым/ запись / отладка.

0 голосов
/ 24 февраля 2019

Объявите переменную foto вне функции generate (которая сделает ее глобальной), и она будет доступна в функции verify.Я предлагаю вам прочитать о замыканиях

var foto;
function generate(){ 

    var score = document.getElementById('score');
    foto = Math.floor(Math.random() *20) + 1;
    var fotoDOM = document.querySelector('.foto');
    fotoDOM.src = 'foto-' + foto + '.jpg';
    console.log(foto);
    document.getElementById('photo').style.animation ="appearPerson 1s";
    score.innerHTML = foto; 

}



document.querySelector('.btn').addEventListener('click', verify);     


function verify()
{


    var yesMeetup = [0,1,2,3,4,5,6,7,8,9,10,12,13,14,15];
    var notMeetup = [16,17,18,19,20];
    var notButton = document.getElementById('no');
    var yesButton = document.getElementById('yes');
    var decisao = document.getElementById('decisao');
    debugger
    if(yesButton){

        if(yesMeetup.indexOf(foto) ){

            decisao.textContent = "You got it";

        }else if(notMeetup.indexOf(foto) ){

            decisao.textContent = "wrong";
        }
    }

    else if (notButton){

        if(notMeetup.indexOf(foto) ){

            decisao.textContent = "You Gou it";


        }else if(yesMeetup.indexOf(foto) ){

            decisao.textContent = "Wrong";

        }

    }  
}
...