NodejsにロードされたJavascriptファイルは、無名関数に自動的にラップされます。
したがって、Nodeで実際に実行しているのは、次のとおりです。
(function(/* There are args here, but they aren't important for this answer */){
var x = 10;
var o = { x: 15 };
function f(){
console.log(this.x);
}
f();
f.call(o);
})();
ブラウザはこれを行いません。問題は、Nodex
が関数のスコープ内の単なる正規変数であり、グローバルスコープの一部ではないことです。f()
このように呼び出すと、グローバルスコープthis
内になります。f
グローバルスコープに直接置くx
と、どちらの場合でも機能します。
this.x = 10;
これは、ブラウザのグローバルオブジェクトと、ノードのグローバルオブジェクトに配置x
されます。window
global
通常、ノードでグローバルにロードするのではなく、ここで説明するように、コードをモジュールにグループ化します。ここにアクセスできるさまざまなグローバルなものに関する情報があります。また、ラッパーに興味がある場合は、ここで確認できます。