Node.jsでこれを入力すると、undefined
が返されます。
var testContext = 15;
function testFunction() {
console.log(this.testContext);
}
testFunction();
=>undefined
var
キーワードがなければ、合格します(=> 15)。 Chromeコンソール(var
キーワードありとなし)で動作しています。
var
は現在のモジュールのローカルであるため、testContext
を使用する場合、Nodeでは機能しません。直接:console.log(testContext);
。
var
と入力しないと、testContext
がNodeプロセス全体のグローバル変数になります。
Chrome(または他のブラウザ-まあ、oldIEについてはよくわかりません...)で、あなたの例でvar
を使用してもしなくても構いません。 testContext
グローバルコンテキストに移動します、つまりwindow
です。
ところで、「グローバルコンテキスト」は、JSの関数呼び出しのデフォルトthis
です。
主な違いは、Node.jsのすべてのモジュール(スクリプトファイル)が独自に実行されることです closure while Chromeおよび他のブラウザーはグローバル内ですべてのスクリプトファイルを直接実行します範囲。
これは Globals documentation で言及されています:
これらのオブジェクトの一部は、実際にはグローバルスコープではなく、モジュールスコープにあります-これは注意されます。
Nodeモジュールで宣言するvar
sはこれらのクロージャーの1つに分離されます。そのため、他のモジュールでは export members が必要です。それらに到達します。
ただし、特定のコンテキストなしでfunction
を呼び出す場合、通常はglobal objectにデフォルト設定されます-これは便利に呼び出されます- global
ノード内。
function testFunction() {
return this;
}
console.log(testFunction() === global); // true
そして、それを宣言するvar
がなければ、testContext
はデフォルトで グローバルとして定義 になります。
testContext = 15;
console.log(global.testContext); // 15
document で述べたように
node.jsモジュール内のvar somethingは、そのモジュールに対してローカルになります。
そのため、var testContext
はモジュールコンテキストにあり、このコンテキストはglobal
です。
または、次を使用できます。
global.testContext = 15;
function testFunction() {
console.log(this.testContext);
}
testFunction();
問題はthis
キーワードに関係していると思います。 console.log(this)
を実行すると、testContextが定義されていないことがわかります。あなたが試してみたいことがあります:
this.testContext = 15;
function testFunction() {
console.log(this.testContext);
}
testFunction();