0

変数のスコープに関して少し混乱しています。以下のコードは playerDetails 関数を正しく実行しません - 関数ブロック内で変数「パネル」を宣言しない限り。

ただし、変数が関数ブロックの外部で宣言されている場合、グローバルスコープがあり、すべての関数ブロックに表示されると思いました。

要するに、最初の行を 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 に答える