作家
登录

在Node.js中看JavaScript的引用

作者: 来源: 2017-04-11 09:02:23 阅读 我要评论

打个比方最初设置 var data = http://developer.51cto.com/art/201704/obj.data 的时刻,内存中的情况大年夜概是:

  1. |   Addr   |  内容  | 
  2. |----------|-------- 
  3. | obj.data |  内存1 | 
  4. |   data   |  内存1 | 

所以经由过程 data.xx 可以修改 obj.data 的内存1。

然后设置 data = http://developer.51cto.com/art/201704/xxx,因为 data 是拷贝的一个新的值,只是这个值是一个引用(指向内存1)罢了。让它等于别的一个对象就比如:

  1. |   Addr   |  内容  | 
  2. |----------|-------- 
  3. | obj.data |  内存1 | 
  4. |   data   |  内存2 | 

让 data 指向了新的一块内存2。

如不雅是传统的引用(如上文中提到的 C++ 的引用),那么 obj.data 本身会变成新的内存2,但 JavaScript 中均是值传递,对象在传递的过程中拷贝了一份新的引用。所以这个新拷贝的变量被改变并不影响本来的对象。

Node.js 中的 module.exports 与 exports

上述例子中的 obj.data 与 data 的关系,就是 Node.js 中的 module.exports 与 exports 之间的关系。让我们来看看 Node.js 中 require 一个文件时的实际构造:

  1. var a = {n: 1};  
  2. var b = a;  
  3. a.x = a = {n: 2};  
  4. console.log(a.x);  
  5. console.log(b.x); 
  1. function require(...) { 
  2.   var module = { exports: {} }; 
  3.   ((module, exports) => { // Node.js 中文件外部其实被包了一层自履行的函数 
  4.     // 这中心是你模块内部的代码. 
  5.     function some_func() {}; 
  6.     exports = some_func; 
  7.     // 如许赋值,exports便不再指向module.exports 
  8.     // 而module.exports依旧是{} 
  9.  
  10.     module.exports = some_func; 
  11.     // 如许设置才能修改到本来的exports 
  12.   })(module, module.exports); 
  13.   return module.exports; 

更复杂的例子

所以很天然的:

Node.js 中的 exports 就是拷贝的一份 module.exports 的引用。经由过程 exports 可以修改Node.js 当前文件导出的属性,然则不克不及修改当前模块本身。经由过程 module.exports 才可以修改到其本身。表示上来说:

  1. exports = 1; // 无效  
  2. module.exports = 1; // 有效 

这是二者表示上的差别,其他方面用起来都没有差别。所以你如今应当知道写module.exports.xx = xxx; 的人其实是多写了一个module.。

为了再演习一下,我们在来看一个比较复杂的例子:

按照开端的结论我们可以一步步的来看这个问题:

  1. var a = {n: 1};   // 引用a指向内存1{n:1} 
  2. var b = a;        // 引用b => a => { n:1 } 

最开端把眼光瞄向了 require 这个模块。设法主意很简单,因为 Node.js 中惹人一个模块都是经由过程 require 这个办法加载的。于是就开端思虑 require 能不克不及在更新代码之后再次 require 一下。测验测验如下:

内部构造:

  1. |   Addr  |     内容     | 

  2.   推荐阅读

      移动互联网人口红利逐渐消退 华为Hi-Star晨星计划一触即发

    【51CTO.com原创稿件】 据懂得,在2016岁尾,我国移动智能终端范围冲破13.7亿台,跟着人口红利减退,充分盘活、经营现有流量便成为了各行各业全新的机会与挑衅。经由过程近几年互联网手机>>>详细阅读


    本文标题:在Node.js中看JavaScript的引用

    地址:http://www.17bianji.com/lsqh/34702.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)