node.js中的exports和model.exports

nodejs编译js文件时对js文件的包装

 

  nodejs在编译js文件时会对获取的js文件内容进行头尾包装 (function(exports,require,module,__filename,__dirname){\n 和 \}),正常的js文件就变成了:

(function(exports,require,module,__filename,__dirname){

  var a=function(){};

  ..............

})

包装后我们在每一个js文件中都会有变量exports,require,module同时包装后防止了全局污染

 

exports和module.exports的区别是什么呢?

 

  对js文件内容进行包装后返回一个函数,在函数执行时传递的参数中 exports和module.exports指向的是同一个变量可以通过下面的方式得到验证:

将下面的代码保存到 nodejsbuild.js文件

 

console.log(arguments)

console.log(exports==exports)

 

运行 node nodejsbuild.js

 

  初始时传入的exports和model.exports是相等的 当我们对exports进行赋值操作或models.exports进行赋值操作时,两者相等的关系会被破坏 ,而最后使用的其实是model.exports. 当时用的时候发现出现了问题

通过上面的如可以很明显的知道到底发生了什么,左后为什么和预期的结果不一样了。当我们对exports或model.exports进行赋值后为保证一致性需要进行赋值操作否则最后使用时有可能和预期不一样。

 

  上面是很常见的对一个变量进行赋值后导致引用的对象变了最后程序运行的结果和预期不一致的问题

转载于:https://www.cnblogs.com/zp900704/p/4811497.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值