zoukankan      html  css  js  c++  java
  • exports和module.exports的区别——学习笔记

    一开始,exportsmodule.exports都指向空对象(同一内存块)exports是引用 module.exports的值。module.exports 被改变的时候,exports不会被改变,而模块导出的时候,真正导出的执行是module.exports,而不是exports

    /*app.js*/
    
    var s = require("./log");
    
     s.log("hello");
    //log.js
    
    exports.log =function (str) {
    
    console.log(str);
    
     }

    //log.js
    module.exports =function (str) {
    
    console.log(str);
    
    }

    上述两种用法都没问题,但如果这样使用

    exports = function (str) { 
    console.log(str);     
    }

    前面的例子只是给 exports指向的对象添加属性,只是对 exports 指向的内存做了修改,内存指向并未发生改变。而上例则是对exports指向的内存进行了覆盖,使exports指向了一块新的内存,这样,exports和module.exports指向的内存并不是同一块,exports和module.exports并无任何关系。exports指向的内存有了变化,而module.exports指向的内存并无变化,仍为空对象{}。

     

     


     

     

     

     

     
    //app.js
     var x = require('./init');
     console.log(x.a)
    //init.js
     module.exports = {a: 2}//通过赋值的方式指向了另一块内存
     exports.a = 1  //只是在原来指向的内存中添加属性,内存指向并没有变化

    运行app.js会有输出

    2

    这也就是module.exports对象不为空的时候exports对象就自动忽略因为module.exports通过赋值方式已经和exports对象指向的变量不同了exports对象怎么改和module.exports对象没关系了。真正导出的执行是module.exports)

     

     

  • 相关阅读:
    清除浮动
    svg自己记得文档
    CSS3最颠覆性的动画效果,基本属性[过渡和2D]
    下载svg图片转化为字体使用!!!!!!
    CSS3 Transform的perspective属性【转载,自己学习使用】
    CSS炫酷样式,不断编辑更新...
    VC++ GDI+编程的字体和文本绘制
    图像处理常用算法
    详细解说STL hash_map系列
    微软公司软件开发模式简介 收藏
  • 原文地址:https://www.cnblogs.com/JhonFlame/p/7999807.html
Copyright © 2011-2022 走看看