0

次のコードでモジュールを定義している場合:

module.exports = Person;

function Person (name) {
    this.name = name;
};

まだ定義していないのに、このファイルが必要なときに最初の行で ReferenceError が返されないのPersonはなぜですか?

4

1 に答える 1

1

何かが実行される前に、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 つです (関数が実際に使用可能になるタイミング)。

于 2014-02-21T23:18:58.747 に答える