2014-10-03 47 views
0

有两种基本方式可以看到正在编写的节点模块。第一个设置要导出到其自己的财产上module.exports每个函数或变量:是否将module.exports分配给单独的对象浪费存储器

module.exports.foo = function() { 
    ... 
} 

,第二个是创建具有您要导出的属性的新对象,并指定module.exports即在文件的结尾:

var FooObject = { 
    foo: function() { 
    ... 
    } 
}; 
... 

module.exports = FooObject; 

第三件事,我有时会看到被设置module.exports到拥有所有你想要导出的属性的对象,但对于这个讨论的目的,这相当于我提到的第一种方法:

module.exports = { 
    foo: function() { 
    ... 
    } 
} 

我们是通过第二种方式来浪费内存吗(创建一个对象并指定module.exports)?我一直认为,由于所有赋值都是引用,因此当您执行module.exports = {...}时应该创建一个新对象,因此这两个值相当。情况并非如此吗?

+1

并非所有的赋值都是引用,那只是对象(包括函数)。像字符串,数字,布尔值等基元总是被值复制。 – mscdex 2014-10-03 20:34:16

+1

这很好,注意第一个选项意味着你需要模块并调用它...''''''''''' 'FooObject');'...因为第一个是声明一个函数,第二个是声明一个对象。 – incutonez 2014-10-03 21:37:50

回答

1

最后两个例子是等价的。唯一的区别是第二个是按名称设置对象,第三个是通过对象字面值设置它。