node.js exports和module.exports的区别

要首先了解值类型以及引用类型

(1)值类型:字符串(字符串),数值(数),布尔值(布尔值),无,未定义

(2)引用类型:对象(对象),数组(阵列),函数(功能)

值类型数据存储在栈上,而引用类型数据存储在堆上(此图只为解释堆栈,与下文的代码中变量无关系

值类型:

let a=10
let b=a
console.log(b)  //10

引用类型:

let obj1 = {}
let obj2 = obj1
obj2.name = xx
console.log(obj1)  // name = xx

 用点语法给对象添加属性的时候,OBJ1和OBJ2指针指向同一地址,所以OBJ1也有了属性名= XX

但是如果用赋值的方法给对象添加属性时,指针指向会发生改变,此时obj2指针指向了新地址例如:

let obj1 = {}
let obj2 = obj1
obj1.name = "xx"
obj2 = {name:"yy"}
console.log(obj1)        //name:xx
console.log(obj2)        //name:yy

 

所以exports和module.exports的区别如下:

默认情况下exports = module.exports

(1)exports

exports 只能通过“。语法”来向外部暴露内部变量,如exports.xxx = yyy

// 01.js中创建
exports.name = "xxx";
exports.fn  = () => {
    console.log("aaa")
}
exports.obj = {
    name:"aa",
    age:18
}

// 02.js中引入
let a = require("./01")
console.log(a);      

输出结果为{ name: 'xxx', fn: [Function], obj: { name: 'aa', age: 18 } }

但是不能通过直接赋值对象,此时会返回空对象

// 01.js中创建
exports = {
    name : "xxx",
    fn: () => {
        console.log("aaa")
    },
    obj: {
        name:"aa",
        age:18
    }
}

// 02.js中引入
let a = require("./01")
console.log(a);      

输出结果为{}空对象

(2)module.exports

module.exports则可以用“。语法”和赋值对象两种方法来实现module.exports.xx =“yy”或者module.exports = {xx =“yy”}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值