私はJavascriptを使ってゲームを作っています。私はモジュールをバンドルするためにwebpackを使用しているので、各Javascriptファイルの最後にはmodule.exports
を使用します。私はSpaceship
にクロームのdevのツールおよびタイプを開いた場合、次のように私は機能randomSpaceship
を変更した場合、私はUncaught ReferenceError: Spaceship is not defined(…)
機能が一番上にあるときにスクリプトの特定のポイントで機能が定義されないのはなぜですか?
を取得し、上記デバッグの各点で
//spaceship.js
var Spaceship = function(options) {
this.position = options.position
this.name = options.name
}
module.exports = Spaceship
//game.js
var Spaceship = require("./spaceship");
var Game = function() {
this.num_spaceships = 5;
this.spaceships = [];
// DEBUGGER 1
this.add_spaceships();
}
Game.prototype.add_spaceships = function() {
// DEBUGGER 2
for(var i = 0; i < this.num_spaceships; i++) {
this.spaceships.push(this.randomSpaceship
}
}
Game.prototype.randomSpaceship = function() {
//DEBUGGER 3
}
:ここでは一例である
Game.prototype.randomSpaceship = function() {
//DEBUGGER 3
var s = new Spaceship();
}
DEBUGGER 3では、Spaceship
が定義されています(私が開発ツールを開いた場合、Spaceshipは関数になります)。
どうしてですか?私はそれがおそらく可変ホイストと関係があると思っていましたが、ファイルgame.jsの上に可変スペースシップを宣言して割り当てています
関数式を使用する場合、値は実行時まで割り当てられません。それが起こる前に変数を調べているかもしれません。式を宣言に変更します。 '関数宇宙船(オプション){...}'を使うと、別の結果が得られるかもしれません。 – RobG
@RobG、どういう意味ですか?私は関数の宣言で試してみましたが、関数内で直接参照されていなければ、変数は検査のためにまだ利用できません。 –