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)

     

     

  • 相关阅读:
    leetcode-剑指10-OK
    leetcode-剑指22-OK
    vue组件引入
    vue项目单页
    vue-cli脚手架创建vue项目
    vue生命周期
    ES6 DEMO
    ES6
    记录一个天坑
    CentOS 7防火墙快速开放端口配置方法
  • 原文地址:https://www.cnblogs.com/JhonFlame/p/7999807.html
Copyright © 2011-2022 走看看