在Javascript中使用DOM难以理解作用域和变量

在Javascript中使用DOM难以理解作用域和变量,javascript,javascript-objects,dom-events,Javascript,Javascript Objects,Dom Events,我正在制作一个只使用Javascript的刽子手游戏。这是一节课。我是Javascript和DOM新手,所以请友好一点。现在,我只想在控制台日志中打印一些东西,任何东西。我已经花了好几天好几个小时删除了我所有的功能和游戏进程,除了这里显示的几个,只是为了让它工作。我的思考过程是,在循环中不会改变并且不需要在html中动态更新的变量不需要成为hangman游戏的属性。但是,当我运行下面的代码只是为了让console.log工作时,我发现userGuess没有定义。我想我是通过给它指定keyUp事件

我正在制作一个只使用Javascript的刽子手游戏。这是一节课。我是Javascript和DOM新手,所以请友好一点。现在,我只想在控制台日志中打印一些东西,任何东西。我已经花了好几天好几个小时删除了我所有的功能和游戏进程,除了这里显示的几个,只是为了让它工作。我的思考过程是,在循环中不会改变并且不需要在html中动态更新的变量不需要成为hangman游戏的属性。但是,当我运行下面的代码只是为了让console.log工作时,我发现userGuess没有定义。我想我是通过给它指定keyUp事件的值来定义它的。如果我让userGuess成为hangman游戏的一个属性,然后用hangmanGame.userGuess更新我的代码的其余部分,我会得到所有这些意外的令牌错误

有什么想法吗

//Variables===============================================================
var hangmanGame = {presidents: [
  "WASHINGTON",
  "ADAMS", 
  "JEFFERSON",
  "MADISON",
  "MONROE",
  "JACKSON",
  "VANBUREN",
  "HARRISON",
  "TYLER",
  "POLK",
  "TAYLOR",
  "FILLMORE",
  "PIERCE",
  "BUCHANAN",
  "LINCOLN",
  "JOHNSON",
  "GRANT",
  "HAYES",
  "GARFIELD",
  "ARTHUR",
  "CLEVELAND",
  "HARRISON",
  "MCKINLEY",
  "ROOSEVELT",
  "TAFT",
  "WILSON",
  "HARDING",
  "COOLIDGE",
  "HOOVER",
  "TRUMAN",
  "EISENHOWER",
  "KENNEDY",
  "NIXON",
  "FORD",
  "CARTER",
  "REAGAN",
  "BUSH",
  "CLINTON",
  "OBAMA"
], 

  wrongAllowed: 7,
  goodLetters: 0,
  wordArray: [],
  badArray: [], 
  wins: 0,

//functions=========================================================
  startGame: function() {
  var word = hangmanGame.presidents[Math.floor(Math.random() * hangmanGame.presidents.length)];
  },
}

  function write() {
    console.log("President" + word);
  }


//main process===============================
  document.onkeyup = function(event) {
    var userGuess = String.fromCharCode(event.keyCode).toUpperCase();
  }

  if (userGuess == 'A'){
      write();
    }
换成这个

// Main process
document.onkeyup = function(event) {
  var userGuess = String.fromCharCode(event.keyCode).toUpperCase();
  if (userGuess === 'A') {
    write();
  }
}

keyup
事件处理程序中包含
if
语句<代码>返回
word
变量,从
手工启动名
函数,传递
word
写入
函数

//变量===============================================================
var hangmanGame={
主席:[
“华盛顿”,
“亚当斯”,
“杰斐逊”,
“麦迪逊”,
“梦露”,
“杰克逊”,
“范布伦”,
“哈里森”,
“泰勒”,
“波尔克”,
“泰勒”,
“菲尔莫”,
“皮尔斯”,
“布坎南”,
“林肯”,
“约翰逊”,
“赠款”,
“海斯”,
“加菲猫”,
“亚瑟”,
“克利夫兰”,
“哈里森”,
“麦金利”,
“罗斯福”,
“塔夫脱”,
“威尔逊”,
“哈丁”,
“柯立芝”,
“胡佛”,
“杜鲁门”,
“艾森豪威尔”,
“肯尼迪”,
“尼克松”,
“福特”,
“卡特”,
“里根”,
“布什”,
“克林顿”,
“奥巴马”
],
错误:7,
goodLetters:0,
字数组:[],
badArray:[],
胜利:0,
//功能=========================================================
startName:function(){
var word=hangmanGame.presidents[Math.floor(Math.random()*hangmanGame.presidents.length)];
回信
}
}
函数写入(word){
console.log(“主席”+单词);
}
//主要过程===============================
var hangman=hangmanGame.startGame();
document.onkeyup=函数(事件){
var userGuess=String.fromCharCode(event.keyCode.toUpperCase();
如果(userGuess==“A”){
写作(刽子手);
}

}
Woah。很抱歉格式化。这是我的第一篇文章。我想我在发帖前把它都缩进了。我不确定它的第一部分在代码框外是什么?我不能从缩进中分辨出来,但看起来你的
hangmanGame
对象并没有一直关闭。你只将userGuess定义为局部变量,所以它在这段代码文档外不可见。onkeyup=function(event){}。通过简单地将userGuess添加为全局变量,您将解决这个问题。希望这有帮助。
write()
call中定义的
word
在哪里?@guest271314
window.hangmanGame.startGame()
,如果OP在method@Daniel_L你的回答如何解决这个问题?您的解决方案中的
write
函数是否定义了
word
?OPs问题没有具体解决
word
@Daniel_L“OPs问题没有具体解决
word
”?是的,OP的问题确实专门针对word;请参阅原始问题“此时,我只想在控制台日志中打印一些东西,任何东西。”
write
function:
function write(){console.log(“总统”+word);}
。您的回答实际上并没有解决问题中描述的问题,因为
word
仍不会在
write
函数中定义?