全局变量被认为是不好的做法,但我想将它们用作一种简单的“单例”值。
以下包含在NodeJS中在全局范围内声明变量的三种不同方法(我认为)。函数change2()成功将其值从“... one”更改为“... two”。但是函数change3()在将它们设置为“...... three”时没有成功。
如何从匿名函数内部更改全局变量的值? - 我也试过调用一个没有效果的setter方法。 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);
输出是:
O:\node>node scope
v1: one v2: one v3: one
v1: two v2: two v3: two
v1: two v2: two v3: two
O:\node>
答案 0 :(得分:1)
在change3()
中,你永远不会真正执行内部函数。 .bind()
只返回一个新函数,但你实际上从未调用过那个新函数。
如果你想打电话,你必须在.bind()
之后添加parens:
function change3() {
(function() {
global.v1 = 'v1: three';
v2 = 'v2: three';
v3 = 'v3: three';
}).bind({v1:v1, v2:v2, v3:v3})(); // add parens at the end here
};
但是,你甚至不需要.bind()
,因为它没有帮助你。
function change3() {
(function() {
global.v1 = 'v1: three';
v2 = 'v2: three';
v3 = 'v3: three';
})(); // add parens at the end here
};