全局变量无法识别Javascript

时间:2013-10-15 07:47:53

标签: javascript

我对可变范围感到有点困惑。下面的代码没有正确执行playerDetails函数 - 除非我在函数块中声明变量'panel'。

然而 - 我认为如果变量是在函数块之外声明的,那么它具有全局范围 - 并且对所有功能块都是可见的。

简而言之 - 我可以通过将第一行移动到playerDetails功能块来使代码工作 - 我只是不明白为什么我需要这样做。任何帮助将不胜感激。

感谢。代码如下;

var panel = document.getElementById ( "panel" ) ;

function init()
{
var player1 = {name: "DJCraigo" , score: 178242 , rank: "1st"} ;
var player2 = {name: "Tohny" , score: 155522 , rank: "2nd"} ;
player1.showDetails = playerDetails ;
player2.showDetails = playerDetails ;

player2.showDetails() ;

player1.showDetails() ;
}

function playerDetails()
{
  panel.innerHTML += "Player with name " + this.name + " is ranked " + this.rank + " with a         score of " + this.score + "<br>" ;
}
document.addEventListener ( "DOMContentLoaded" , init , false ) ; 

1 个答案:

答案 0 :(得分:1)

面板变量声明/初始化的行在读取时执行。并且DOM可能未初始化,因此,getElementById不会返回任何内容。

如果您希望变量是全局变量,请按原样声明它,但在init函数内初始化(getElementById)。

var panel;
function init()
{
    panel = document.getElementById ( "panel" ) ;
...