将函数内部的变量传递给其他函数而不更改其在Javascript中的值

问题描述 投票:0回答:2

我有2个函数我想知道如何获得变量“foto”,它在函数generate()中生成一个随机数到函数verify(),因为indexOf将验证generate()上生成的数字function并将检查此值是否在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";
        }

    }
}
javascript arrays function variables indexof
2个回答
0
投票

generate函数之外声明foto变量(这将使其成为全局)并且它将在verify函数中可用。我建议你读一下closures

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

        }

    }  
}

0
投票

如果函数foto需要verify的值,那么那应该是该函数的参数:

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操作,以及另一组函数中的所有其他业务逻辑,那么你的代码应该更容易阅读/ write / debug。

© www.soinside.com 2019 - 2024. All rights reserved.