0

我对可变范围有点困惑。下面的代码没有正确执行 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 ) ; 
4

1 回答 1

1

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

如果您希望您的变量是全局的,请按照您的方式声明它,但在 init 函数中初始化 (getElementById)。

var panel;
function init()
{
    panel = document.getElementById ( "panel" ) ;
...
于 2013-10-15T08:00:59.693 回答