2016-02-21 70 views
0

我是新來的JS,節點,作用域結果。我看到很多人說永遠不會使用全局變量,而其他人會說非常謹慎地使用它們。基本上,我有一個函數聲明/重置變量。低於全球範圍的範圍中的node.js

function resetStuff(){ 
    var foo = ''; 
    var bar = false; 
    ... 
} 

和一個socket.io處理程序。

io.on('connection', function(socket){ 
    socket.on('event1', function (data){ 
     if (foo == 'bar') { 
      doStuff() 
     } 
    }); 
}); 

對我來說,好像我要搬遷foobar到全球範圍內,但有什麼辦法給socket.io事件訪問他們不這樣做呢?

謝謝!

回答

1

沒有,Node.js的具有模塊範圍。所以,函數之外的每個變量只是模塊範圍,而不是全局。 (不喜歡在客戶端瀏覽器,JS那裏不在函數的每個變量將在全球範圍內)

所以,你可以:

var foo,bar; 

io.on .... 

而且,你可以使用匿名函數定義unamed範圍:

(function(){ 
    var foo,bar; 

    io.on .... 
})(); 
+0

感謝您的答覆。我可以在模塊範圍中聲明變量,然後從重置函數和io事件訪問它們嗎?我認爲這將解決我的問題。 – Radeon348

+1

@ Radon348是的。但隨着你的模塊變大,這些變量可能會變成非託管,可能會導致錯誤,我建議你把這些代碼放在一個未命名的範圍內。 – lovespring