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