Функция JavaScript не передает переменную - PullRequest
0 голосов
/ 15 января 2019

Моя игра здесь - игра на угадывание, которая подсчитывает количество угадываний и не включает повторяющихся догадок.

Я пытаюсь передать попытки переменных из попыток функций в попытки функций, но это не сработает. Счет остается 0, но когда я передаю sameGuess.length, он работает, почему это так?

let random = Math.round(Math.random()*100);
let guess = false;
let sameGuess = []
let tries = sameGuess.length;


function game(){
    while (guess === false){
        let myGuess = prompt('Guess a number between 0-100:');
        numCheck(myGuess);
        if (myGuess == random){
            guess = true;
            repeats(myGuess, sameGuess);
            attempts(tries, sameGuess);    
        }else if (myGuess < random){
            repeats(myGuess, sameGuess);
            alert('Your number was too small, try again!');
            guess = false;    
        }else if (myGuess > random){
            repeats(myGuess, sameGuess);
            alert('Your answer was too big, try again!');
            guess = false;
        }
    }
}

function attempts(tries, sameGuess){
    if (sameGuess.length == 1){
        alert('Well done, you got it frist try!');
        document.write("<h1>GUESSING GAME</h1><p>Thank you for playing the Guessing Game <br> Created by Jonathan Fox</p>");
    }else if (sameGuess.length <= 15){
        alert('You took ' + sameGuess.length + ' tries');
        alert('Well done, you didn\'t take too many tries!');
        document.write("<h1>GUESSING GAME</h1><p>Thank you for playing the Guessing Game <br> Created by Jonathan Fox</p>");
    }else if (sameGuess.length >=16){
        alert('You took ' + sameGuess.length + ' tries');
        alert('You got it, but lets see less tries next time!'); 
        document.write("<h1>GUESSING GAME</h1><p>Thank you for playing the Guessing Game <br> Created by Jonathan Fox</p>");
    }
}

function repeats(myGuess, sameGuess){
    if ((sameGuess.indexOf(myGuess)) == -1){
        (sameGuess.push(myGuess));
    }else alert('You have already guessed that number! - Dont worry, i haven\'t counted it!');
}

function numCheck(myGuess){
    if (isNaN(myGuess)){
        alert('Enter a number, don\'t try and be sneaky!');
    }
}

game ();

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Вы должны поставить try = sameGuess.length; внутри вашего времени!

0 голосов
/ 15 января 2019

При доступе к array.length это значение равно , скопировано , что означает, что оно не будет обновляться даже после добавления значения в массив:

var array = [];
var length = array.length;
console.log(length); // 0

array.push('Some value');
console.log(length); // Still 0, since it was copied, it is _not_ a reference to the live value
console.log(array.length); // 1, this is a live reference to the length of the array

В нынешнем виде ваш код работает нормально, хотя, похоже, вы можете удалить его аспект tries и использовать sameGuess.length напрямую, как и сейчас.

См. Этот пост для дальнейшего обсуждения Передача по ссылке или Передача по значению .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...