2017-10-28 2 views
0

ちょうどJS学ぼうと、いくつかのミニゲームロジックを書く機能はありませんが、contantleyはjsの取得中にエラーキャッチされない例外TypeErrorは:roundScoreは

Uncaught TypeError: roundScore is not a functionは私が持っているかのように、これはある理由を確認してくださいすることはありません、このエラーが発生しますので、私はこだわっています問題の機能:

var playerScore = 0; 
var player = 0; 
var roundScore = 0; 

function rollDice() { 
    var dice; 
    dice = Math.floor((Math.random() * 6) + 1); 
    return dice; 
} 

function playerTurn() { 
    player === 0 ? player = 1 : player = 0; 
} 

function roundScore() { 
    rollDice() !== 1 ? roundScore += rollDice() : (playerTurn(), roundScore = 0); 
    return roundScore; 
} 

document.getElementById('rollDice').addEventListener('click', function() { 
    document.getElementById('round-score-' + player).innerHTML = roundScore(); 
}); 

なぜこのエラーが発生しているのですか? thx

答えて

4

roundScoreという名前の関数と変数の両方があります。 JavaScriptがコンパイルされる方法のため、関数はファイルの先頭に移動します。つまり、関数ではなくroundScoreが0です。だから、関数か変数のどちらかに名前をつけて、あなたはうまくいくはずです。

+0

:)良いキャッチ、愚かな間違いで迷惑を掛けてくれてありがとう – John

+0

jsがコンパイルするときに関数と変数がファイルの先頭にぶら下がりますが、それはホイストの変数を上回る関数です..?ホイストが起こったときにすべてが 'undefined 'に設定されていると思います。 – John

+0

変数と関数の両方がスコープの上部に吊り上げられますが、関数は常に最上部にあります。あなたが 'js hoisting'のいくつかのバリエーションをgoogleするなら、これに関する記事がたくさんあります。ここに1つあります:https://scotch.io/tutorials/understanding-hoisting-in-javascript – shadymoses

関連する問題