CommonJS
1.对于基本数据类型,属于复制。即会被模块缓存。同时,在另一个模块可以对该模块输出的变量重新赋值。
// number.js
let num = 1
function add() {
num++
}
module.exports.num = num
module.exports.add = add
// main.js
var number = require('./number')
//1
console.log(number.num)
number.add()
//1
console.log(number.num)
number.num = 3
//3
console.log(number.num)
(注意:由于CommonJS是值的复制,一旦模块输出了值,模块内部的变化就影响不到这个值;因此main.js中的number变量本身和number.js没有任何指向关系了,虽然我们调用模块内部的add函数来改变值,但也影响不到这个值了;反而我们在输出后可以对这个值进行任意的编辑。)
2. 对于复杂数据类型(引用类型),属于浅拷贝。由于两个模块引用的对象指向同一个内存空间,因此对该模块的值做修改时会影响另一个模块。
// obj.js
var obj = {
color: {
list: ['red', 'yellow','blue']
}
}
module.exports = obj
//a.js
var obj = require('./obj')
obj.color.list.push('green')
//{ color: { list: [ &