2013-03-16 66 views
1

也許這是習慣,或者爲了一致性,但爲什麼var在模塊的根範圍內使用太多(很多代碼示例顯示它)?它真的有必要嗎?我的意思是這個模塊是根作用域,所以不管你是否聲明瞭一個變量或者沒有變量var,你在兩種情況下都將它附加到同一個對象,對吧?你沒有混淆任何命名空間,不是嗎?在nodejs/commonjs模塊的根作用域中聲明對象 - var或not to var?

qs = require('querystring'); // looks better than 

var qs = require('querystring'); // right? 
+0

我對node.js沒有任何經驗,但沒有'var',它是全局的。 – Daedalus 2013-03-16 05:51:16

+0

如果它在全局範圍內,'var'不會真的有所作爲。把它關掉可能會讓這些「要求」陳述更多的是「進口」外觀。 – Blender 2013-03-16 05:54:32

+0

@達達盧斯這不是事實。 var不會使某些'全局'的東西遍歷函數作用域。以此代碼爲例。 '(函數(){ VAR FOO; (函數(){ 富= '酒吧'; })() 的console.log(FOO); })(); console.log(foo);' 第二個console.log將是ref錯誤,因爲foo未定義。 – 2013-03-16 06:03:28

回答

4

的原因是,共同JS模塊不僅在node.js中,而且在各種其他環境中的使用。

許多常見的JS模塊也可以在瀏覽器中使用。每個模塊都有自己的函數包裝器,以將其與其他模塊隔離。在這種情況下,必須使用var,以免意外泄漏到全局範圍內。

話雖這麼說,大部分開發商更願意在他們的代碼明確使用var,原因如下:

  1. 這是一個良好的編程習慣。說真的,編程是關於實踐的。我很習慣使用var來聲明變量,我經常發現自己在C/C++中使用var聲明,然後讓編譯器對我哭泣。
  2. 使用delete運算符不能刪除使用var聲明的變量。有時我故意忽略全局變量中的var,以便我稍後可以刪除它們並以「忍者模式」運行。