在nodejs / commonjs模块的根范围内声明对象 - 对var变为var还是不变为var?

时间:2013-03-16 05:46:04

标签: javascript node.js commonjs

也许这是习惯,或者也许是为了保持一致性,但为什么var在模块的根范围内使用得那么多(很多代码示例都显示了它)?真的有必要吗?我的意思是模块是根范围,所以无论你是否使用var声明了一个变量,你在两种情况下都将它附加到同一个对象,对吗?你没有弄乱任何命名空间,不是吗?

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

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

1 个答案:

答案 0 :(得分:4)

原因是Common JS模块不仅用于node.js,还用于其他各种环境。

许多Common JS模块也可以在浏览器中使用。每个模块都有自己的函数包装器,以将其与其他模块隔离。在这种情况下,必须使用var,以免意外泄漏到全局范围。

据说大多数开发人员更愿意在代码中明确使用var,原因如下:

  1. 这是一个很好的编程习惯。严肃地说,编程就是练习。我习惯使用var来声明变量,我经常发现自己在C / C ++中使用var声明,然后让编译器对我说话。
  2. 使用var运算符无法删除使用delete声明的变量。有时我故意在全局变量中省略var,以便我以后可以删除它们并以“忍者模式”运行。