渡された関数に何かを定義するとします。Javascript(node.jsを使用している場合)では、変数の範囲をどのように知っていますか/定義していますか?
var name = "Whatever";
これはこれで、アプリケーションの他の部分からアクセス可能である、またはそれは限られていますか? node.js javascriptのスコープを定義する背後にあるロジックは何ですか?
渡された関数に何かを定義するとします。Javascript(node.jsを使用している場合)では、変数の範囲をどのように知っていますか/定義していますか?
var name = "Whatever";
これはこれで、アプリケーションの他の部分からアクセス可能である、またはそれは限られていますか? node.js javascriptのスコープを定義する背後にあるロジックは何ですか?
var
を使用すると、メソッドで定義された変数はそのメソッドでのみ使用できます。あなたは
myVar = 1;
をすればmyVarには、グローバルになります。
ノードは他のjavascriptと似ています。ノードは、あなたが
global.SOME_CONSTANT = 'A Constant'
のようなものを行い、その後、どこでもあなたのコード/モジュールで
SOME_CONSTANT
のようなものを使用することができますので、global
変数を定義しません。
ノードが非同期であるため、多くのコールバックが定義されます。すなわち、あなたはそれが行われたときに渡された関数がsomeMethod
によって呼び出されます
someModule.someMethod(opts, function(data){
// callback code in here
});
の多くを行います。関数内でsomeModule.someMethod
を呼び出したとしましょう。その外部関数で変数を定義した場合、コードは次のようになります
var x = [];
someModule.someMethod(opts, function(data){
// x is available in this callback because of closures, so you can do
x.push(data);
});
この変数は、クロージャのためにコールバックで使用できます。私はあなたがjavascriptで閉鎖についての読書をいくつか過ごすことをお勧めします。
name
変数は、その関数が作成された関数、またはその関数が組み込まれた内の関数でのみ使用できます。
これは、関数が渡される場所に関係なく適用されます。 元の可変環境はどこにでも持ち運べるので、どこでもコードの外にはname
にアクセスできません。
モジュール内でのみ使用でき、定義されている関数内でのみ使用できます。 スコープを定義する方法はありません。すべてのモジュールには独自のグローバルスコープがあります。
閉鎖についてお読みください;