функция JavaScript перестает распознаваться - PullRequest
1 голос
/ 25 марта 2012

, поэтому у меня проблема со следующим фрагментом кода:

<code><!DOCTYPE html>
<html>
    <head>
        <title>Hangman</title>

        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

        <script type="text/javascript">
        <!--
        gallows = new Array("--------\n|      |\n|\n|\n|\n|\n=====",
        "--------\n|      O\n|\n|\n|\n|\n=====",
        "--------\n|      O\n|      |\n|\n|\n|\n=====",
        "--------\n|      O\n|     \\|\n|\n|\n|\n=====",
        "--------\n|      O\n|     \\|/\n|\n|\n|\n=====",
        "--------\n|      O\n|     \\|/\n|      |\n|\n|\n=====",
        "--------\n|      O\n|     \\|/\n|      |\n|     /\n|\n=====",
        "--------\n|      O\n|     \\|/\n|      |\n|     / \\\n|\n=====");

        guessChoices = new Array("JavaScript", "Navigator", "LiveConnect", "LiveWire");

        guessed = [];

        function startAgain()
        {
            guesses = 0;
            max = gallows.length - 1;
            //guessed = " ";
            len = guessChoices.length - 1;
            toGuess = guessChoices[Math.round(len*Math.random())].toUpperCase();
            displayHangman();
            displayToGuess();
            displayGuessed();
        }

        function stayAway()
        {
            document.game.elements[3].focus();
            alert("Don't mess with this form element!");
        }

        function displayHangman()
        {
            document.game.status.value=gallows[guesses];
        }

        function displayToGuess()
        {
            pattern = "";

            for(i=0;i<toGuess.length;++i)
            {
                if(guessed.indexOf(toGuess.charAt(i)) != -1)
                    pattern += (toGuess.charAt(i)+" ");
                else pattern += "_ ";
            }

            document.game.toGuess.value=pattern;
        }

        function displayGuessed(s)
        {

            result="";

            for(i in s)
            {
                guess=s[i];
                result += guess;
            }

            document.game.guessed.value=result;

            //document.game.guessed.value=guessed;
        }

        function badGuess(s)
        {
            if(toGuess.indexOf(s) == -1) return true;
            return false;
        }

        function winner()
        {
            for(i=0;i<toGuess.length;++i)
            {
                if(guessed.indexOf(toGuess.charAt(i)) == -1) return false;
            }
            return true;
        }

        function guess(s)
        {
            if(guessed.indexOf(s) == -1) guessed.push(s);
            if(badGuess(s)) ++guesses;
            displayHangman();
            displayToGuess();
            displayGuessed(guessed);
            if(guesses >= max)
            {
                alert("You're dead. The word you missed was "+toGuess+".");
                startAgain();
            }
            if(winner()) 
            {
                alert("You won!");
                startAgain();
            }
        }
        // -->
        </script>
    </head>
        <body>
            <h1>Hangman</h1>
            <form name="game">
                <pre>
                    <textarea name="status" rows="7" cols="16" onfocus="stayAway();"></textarea>
                

Слово угадать
До сих пор угаданные буквы

Введите следующую догадку.

Ответы [ 2 ]

4 голосов
/ 25 марта 2012

Проблема в следующих строках:

guess=s[i];
result += guess;

Таким образом, вы меняете контекст guess.Если вы измените эту строку на

result += s[i];

Ваша ошибка исчезнет.Вы конфликтуете своей функцией с использованием одного и того же имени для переменной.Не забудьте определить свои переменные с помощью ключевого слова var и избежать такой путаницы.

1 - по возможности использовать анонимные функции

2 - объявлять и использовать локальные переменные

Чтобы избежать конфликтов.

0 голосов
/ 25 марта 2012

В вашей функции displayGuessed() вы устанавливаете переменную guess (которая является функцией) для угаданных букв.

Вы можете исправить это, определив переменную guess вашей функции (отличающую ее от функции), используя ключевое слово "var":

function displayGuessed(s) 
{
    var guess;
    result="";

    for(i in s)
    {
        guess=s[i];
        result += guess;
    }
    document.game.guessed.value=result;
}

Подсказка: я обнаружил эту ошибку легко, используя плагин Firebug для Firefox, который позволяет построчно просматривать код javascript, чтобы увидеть, где что-то идет не так.

...