2017-02-13 91 views
-1

这是我的JS函数,它将文本设置为变量。以及如何分配玩家的神奇宝贝。为什么此代码将文本设置为undefined?

function setStats() { 
// Sets up stats based on Pokemon 
if (computerPokemon === 'Pikachu') { 
    var computerAttack = 30; 
    var computerUlt = 60; // Does damage 
    var computerHealth = 50; 
    var computerSpeed = 20; 
    var computerAgility = 10; 
} 

if (playerPokemon === 'Ho-Oh') { 
    var playerAttack = 70; 
    var playerUlt = 10; // Buffs HP 
    var playerHealth = 80; 
    var playerSpeed = 35; 
    var playerAgility = 12; 
} 

document.getElementById("pHP").innerHTML = 'Health: ' + playerHealth; 
document.getElementById("pSpeed").innerHTML = 'Speed: ' + playerSpeed; 
document.getElementById("pAgility").innerHTML = 'Agility: ' + playerAgility; 
} 

function startGame() { 
// Player Pokemon Selector 
var playerPokemonArray = ["Ho-Oh","Venusaur","Weedle"]; 
var playerPokemonArrayRandom = Math.floor((Math.random() * playerPokemonArray.length)); 
var playerPokemon = playerPokemonArray[playerPokemonArrayRandom]; 
document.getElementById("playerPokemon").innerHTML = 'Your Pokemon is: '  + playerPokemon; 

// Computer Pokemon Selector 
var computerPokemonArray = ["Pikachu","Charmander","Diglett"]; 
var computerPokemonArrayRandom = Math.floor((Math.random() * computerPokemonArray.length)); 
var computerPokemon = computerPokemonArray[computerPokemonArrayRandom]; 
document.getElementById("computerPokemon").innerHTML = 'The Computer\'s Pokemon is: ' + computerPokemon; 

当我运行此代码时,它将我的统计段落的文本设置为undefined。即使变量是根据他们给出的神奇宝贝设置的。

我试过改变我的代码,但没有任何工作。

+1

需要更多的[MCVE。 – melpomene

+0

@Melpomene我的问题是在该代码对不起,我相信削减该代码将很难让人们看到其中问题可能起源于 –

+0

你的代码甚至没有编译(不匹配的'{')。 – melpomene

回答

0

您的代码正在设置setStats()函数中的stat变量,并且您试图从startGame()访问它们。 Javascript是一种词汇范围的语言。由于您正在设置来自函数链接的变量,因此只有该函数才能访问这些变量。您可以通过将变量移动到全局范围来解决此问题。

(另外,你永远不会调用该函数setStats()

+0

你在谈论哪些变数?在我看来,问题是相反的,'setStats()'试图从'startGame()'(在if条件中)访问变量。 'setStats()'中定义的变量不在其外部使用。 – nnnnnn

+0

这是正确的,它取决于范围在全局范围内的代码“行为”不同于本地范围和获取未定义意味着你的部分代码在错误的范围 – Grisza

相关问题