• 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即可。

  • 相关阅读:
    uva 10369 Arctic Network
    uvalive 5834 Genghis Khan The Conqueror
    uvalive 4848 Tour Belt
    uvalive 4960 Sensor Network
    codeforces 798c Mike And Gcd Problem
    codeforces 796c Bank Hacking
    codeforces 768c Jon Snow And His Favourite Number
    hdu 1114 Piggy-Bank
    poj 1276 Cash Machine
    bzoj 2423 最长公共子序列
  • 原文地址:https://www.cnblogs.com/Nick-chen/p/6872118.html
Copyright © 2020-2023  润新知