グローバル変数は悪い習慣とみなされますが、単純な「シングルトン」値の一種として使用したいと思います。node.js:匿名関数からグローバル変数を設定する方法は?
以下に、NodeJSのグローバルスコープで変数を宣言するための3つの異なる方法があります(私は思っています)。関数change2()は値を "... one"から "... two"に変更するのに成功します。しかし、function change3()は "... three"に設定されていません。
グローバル変数の値を匿名関数から変更するにはどうすればよいですか?私はまた、効果のないセッターメソッドを呼び出すことも試みました。 bind()呼び出しは無力な推測です。
global.v1 = 'v1: one';
var v2 = 'v2: one';
v3 = 'v3: one';
function change2() {
global.v1 = 'v1: two';
v2 = 'v2: two';
v3 = 'v3: two';
};
function change3() {
(function() {
global.v1 = 'v1: three';
v2 = 'v2: three';
v3 = 'v3: three';
}).bind({v1:v1, v2:v2, v3:v3});
};
console.log (v1, v2, v3);
change2();
console.log (v1, v2, v3);
change3();
console.log (v1, v2, v3);
出力は次のようになります。change3()
で
O:\node>node scope
v1: one v2: one v3: one
v1: two v2: two v3: two
v1: two v2: two v3: two
O:\node>
「module.exports = {}」という内容のファイル "v1.js"は、単純シングルトンの方がうまく機能します。あなたの他のモジュールで単純な 'require( './ v1')'を実行します。 –
'change3()'では、内部関数を決して実際に実行することはありません。 '.bind()'は新しい関数を返すだけですが、実際に呼び出すことはありません。 – jfriend00
スポッティングのための@ jfriend00ありがとうございました。 '.bind(...)'を単に '()'に置き換えると、呼び出しが開始され、 "... three"が設定されます。 –