zoukankan      html  css  js  c++  java
  • EXPORTS与MODULE.EXPORTS的区别

    可能有人见过直接使用exports的,有的是使用module.exports的,这里稍微的讲解下这两者的区别。

    先举个简单的例子:

    var a = {name:'cxy'};
    var b = a;
    
    console.log(a); // {name: "cxy"}
    console.log(b); // {name: "cxy"}  
    

    a和b输出的结果是一样的。现在我改变下b中name的值:

    b.name = 'wxm';
    
    console.log(a); // {name: "wxm"}
    console.log(b); // {name: "wxm"}  
    

    a和b的输出结果都发生了改变。我再对b进行重新声明:

    var b = {name:'js'};
    
    console.log(a); // {name: "wxm"}
    console.log(b); // {name: "js"}  
    

    这三个例子输出了三种结果:

    1. 声明a对象,并把a赋值给b,然后a和b输出了相同的结果;
    2. 改变了b中的name,那么a中的name也跟着改变;
    3. 重新声明了b对象,那么a中的name则没有跟着b一起改变

    解释:a 是一个对象,b 是对 a 的引用,即 a 和 b 指向同一块内存,所以1中的输出是一样的。当对 b 作修改时,即 a 和 b 指向同一块内存地址的内容发生了改变,a 也会体现出来,所以第2个例子输出也一样。当 b 被覆盖时,b 指向了一块新的内存,a 还是指向原来的内存,所以最后输出会不一样。

    那么此时就可以引出exportsmodule.exports了:

    1. module.exports 初始值为一个空对象 {}
    2. exports 是指向的 module.exports 的引用
    3. require() 返回的是 module.exports 而不是 exports

    如果module.exports发生了新指向,则exports无效;若module.exports没有发生变化,则直接exports即可。

  • 相关阅读:
    C# 延时不卡界面
    C++ 转C#
    CYQ数据库配置
    VB Modbus RTU CRC 校验
    开始写博客了
    简单工厂模式
    单例模式
    基础、hibernate目前应用的对比
    QT Creator 代码自动补全---快捷键设定
    C# CMD直接运行语句
  • 原文地址:https://www.cnblogs.com/Nick-chen/p/6872118.html
Copyright © 2011-2022 走看看