Как вы указали, игра работает нормально, что не удается, когда вы пытаетесь получить доступ к переменной с помощью консоли (в JSFiddle?), которая терпит неудачу. Это происходит по двум причинам:
Упрощение бит: контекст консоли - это документ, на который будут влиять действия консоли. По умолчанию в Chrome контекст является верхним фреймом, но его можно изменить с помощью раскрывающегося списка в верхнем левом углу:
В вашем случае , вы используете JSFiddle, а JSFiddle использует iframe
для отображения результатов. Если область действия консоли - «& lt; top frame & gt;», то вы не сможете получить доступ к переменным из окна результатов. Вам нужно изменить раскрывающийся список на значение «result (fiddle.jshell.net/)».
Но даже если вы это сделаете, вы все равно получите ошибку. Почему это? из-за второй причины: область действия переменной. Снова упрощая бит, переменная scope является частью программы, которая может видеть / получать доступ к переменной. Это может быть все приложение (глобальная переменная) или просто его часть (локальная переменная).
В вашем случае вы используете ключевое слово var
внутри функции (даже если вы не подумайте, что вы используете его внутри функции, на самом деле вы выбрали «Нагрузка» для выполнения JavaScript и который будет обертывать ваш код внутри анонимной функции, выполняемой при загрузке окна) и делает все переменные локальными для этой функции .
Когда вы пытаетесь распечатать переменные с консоли, они не могут быть доступны, поскольку их область действия является той конкретной функцией, и они не существуют вне ее. Чтобы решить эту проблему:
var
. Этот параметр не рекомендуется, так как он может иметь неожиданные результаты (к переменной можно получить доступ к любой функции, а отладка / обслуживание может стать кошмаром); Или window.onload=function(){ }
, но перейдите прямо в <script>
в нижней части тела. Хотя технически то, что вы делаете, делает переменные глобальный (потому что даже с var
они находятся вне всех функций, поэтому они доступны любому).
tl; dr; - для решения проблемы: