新手第一次使用node自己写模块,发现用require引入的模块中的变量,会污染全局变量(应该是叫这个问题吧)。但是根据定义变量使用的方法不同又有差异。。。下面是例子
//mylog.js
var log = {};
abc = 'abc'; //没有使用var定义变量
Date.prototype.Format = function (fmt) {}
module.exports = log;
//example.js
var log = require('./mylib/mylog.js');
console.log(abc); //'abc'
var date = new Date();
console.log(date.Format('yyyy')) //2016
mylog.js中 如果使用 var abc = 'abc'
来定义变量,那么example中引入模块后这个变量显示未定义。也就是说require进来的模块有自己的作用域。我把每一个require的模块看成一个独立的函数,且引入的时候会先执行一次。这样理解对吗?
还有一点对于挂载在prototype上的方法,有没有办法让它只作用在模块中呢?虽然这种需求听起来很奇怪。。。
模块就是一个对象。根据你的问题,考虑一下,如果
显然
obj.abc
是undefined
,而def
则污染了全局变量。如何封装你的模块,参考楼上大大@njaulj 的回答~