次のコードでモジュールを定義している場合:
module.exports = Person;
function Person (name) {
this.name = name;
};
まだ定義していないのに、このファイルが必要なときに最初の行で ReferenceError が返されないのPerson
はなぜですか?
次のコードでモジュールを定義している場合:
module.exports = Person;
function Person (name) {
this.name = name;
};
まだ定義していないのに、このファイルが必要なときに最初の行で ReferenceError が返されないのPerson
はなぜですか?
何かが実行される前に、JS ファイル全体が最初に解析されます。したがって、関数は、行が実際に実行されるPerson()
前の解析ステップから存在します。module.exports = Person
だから、あなたがあなたのやり方でそれをするとき:
// Person already exists and is a function
module.exports = Person;
function Person (name) {
this.name = name;
};
の定義はPerson()
実行前の解析段階で取得されるため、すべてが正常に機能します。
ただし、次のようにした場合:
// Person exists, but has no value yet (will be undefined)
module.exports = Person;
var Person = function(name) {
this.name = name;
};
行の実行Person
時に変数がまだ割り当てられていないため、機能しません。module.exports = Person
これは、関数を定義するこれら 2 つの方法の主な違いの 1 つです (関数が実際に使用可能になるタイミング)。