Discuss / JavaScript / 终于理解了

终于理解了

Topic source

arcelan

#1 Created at ... [Delete] [Delete and Lock User]
exports.foo = function () { return 'foo'; };

这个可以改变原始exports对象,而

exports = function () { return 'foo'; };

只是改变了形参exports的引用,而实际的module.exports还是指向空对象{}

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]

其实CommonJS的规范要同时传入moduleexports不好,容易让人把exports给改了,还不如只传入module,让大家统一用module.exports = xxx

beanmoon

#3 Created at ... [Delete] [Delete and Lock User]

为什么

exports.foo = function () { return 'foo'; };

修改的是原始exports对象,而

exports = function () { return 'foo'; };

修改的是传入的形参?有点搞不懂javascript的参数传递机制~555

廖雪峰

#4 Created at ... [Delete] [Delete and Lock User]

exports.foo = 123是绑定一个属性到exports,exports原来指向的对象没有变,但是多了一个属性

exports = 123是把变量exports指向另一个对象了,原来指向的对象丢掉了,找不到了

可不可以这样理解,exports原来是个对象,给对象增加键值对没有关系,但是把对象修改成函数或者数组就不行了,对吗?

savokiss

#6 Created at ... [Delete] [Delete and Lock User]

涉及到js的引用类型,可以看这个链接逐步执行下:visulize


  • 1

Reply