次のスクリプトを実行するWebブラウザで'wee'
は、コンソールに送信されます。ノードでは、を送信します{}
。
var d = 'wee';
console.log(this.d);
this
この場合、Nodeはexportsオブジェクトを参照していることに気付きました。私は変数について知っていglobal
ます、そしてそれは私がアクセスしようとしているものではありません。d
また、上記のスクリプトはグローバルオブジェクトにも設定されていません。一体どこに行くの?上記のスクリプトで明示的にアクセスできますconsole.log(d);
が、正当な理由がまったくないため、非標準のスペースに隠されているようです。
また、オブジェクトのvar
will宣言を削除すると、予想される動作になりますが、トップレベルのスコープで「裸の」変数とは異なる場所に値を格納するのはばかげているようです。つまり、モジュールシステムのポイントは、地球規模の汚染を防ぐためのある種のデジタル予防策であると考えられているのではないでしょうか。ここでは、パターンを壊すのはとても簡単で、標準的なことをするのはとても難しいようです。d
global
var
d
module
オブジェクトでも宣言されていません。
なぜこの質問をしているのかを正当化する必要はありませんが、最初のトロールに「しかし、なぜあなたはtahthurrdurrrrをやりたいのですか」と答えます。
var d = {};
d.bleep = 'y';
var a = Object.keys(d);
d.bloop = 'y';
d.blop = 'y';
var b = Object.keys(d);
// c = b - a;
var c = b.filter(function (item) {
if(a.indexOf(item) === -1) {
return true;
}
return false;
});
console.log(a,b,c);
の特定のオブジェクト状態を区別できるのと同じようd
に、最上位スコープの状態を区別できるはずです。ブラウザでは、これはwindow
オブジェクトでthis
あり、トップレベルスコープで参照されます。スクリプトの実行前後の環境のプロパティを評価して、非常に多くのことを判断できるはずです。そのうちの1つは、任意のスクリプトの最上位スコープで宣言された関数と変数の検査であり、それらを適用することができます。オブジェクトをエクスポートします。これにより、モジュールとして記述されていないスクリプトのモジュールラッパーをプログラムで簡単に生成でき、割り当て先forEach
のトップレベルの関数と変数のリストに単純に適用されます...whateverThisIs['varFunc']
module.exports['varFunc']
ともの...
この動作は無名関数の動作のように見えます。匿名関数ではオブジェクトthis
を参照できますが、 sは直接呼び出される必要があり(anon funcのスコープ内にあるため)、キーワードなしで宣言されたリークされた変数がオブジェクトに到達する可能性があります。マニュアル全体をまだ読んでいません。これがまさに起こっていることかもしれませんが、各モジュールが独自のコンテキスト(ウィンドウ)で実行され、ノードがとを使用してモジュールコンテキスト間でメッセージを渡したという印象を受けました。 ..window
var
var
window
global
module.exports
知らない。でも知りたいです。あなたが知っているなら、私に知らせてください。