node.js:如何在匿名函数中设置全局变量?

时间:2016-11-26 04:28:23

标签: node.js variables scope global anonymous

全局变量被认为是不好的做法,但我想将它们用作一种简单的“单例”值。

以下包含在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>

1 个答案:

答案 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
};