有些知识时间久了就忘了,可是对编程又很重要,仍是记录下来的好,总结很重要node
//对象变量 let obja = {}; let objb = null; objb = obja; obja.a = "a"; console.log(obja); console.log(objb); //值变量 let a = "a"; let b = a; a += "1"; console.log(a); console.log(b);
console:编程
{ a: 'a' } { a: 'a' } a1 a
解析:
obja、objb为对象变量,在内存中有obja、objb两个对象值的存储空间,两个内存地址,同时有obja,objb两个对象指针;
objb=obja;至关于obja、objb的指针同时指向了obja的内存地址;因此无论是obja、objb其中任何一个变化,另外一个也会相应的变化
a、b为值变量;a,b的指针都指向本身自己,因此a,b变化不会互相受影响缓存
classA:ui
const classB = require("./classB"); const classC = require("./classC"); console.log(classC); console.log(classB); //{} //{ [Function: classC] ccc: [] } //{ [Function: classB] connList: [] } //出现了互相引用 class classA { static addA() { this["connList"].push("A"); } } classA["connList"] = []; module.exports = classA;
classB:this
const classA = require("./classA"); console.log(classA); class classB { static addB() { // classA["connList"].push("A"); console.log("执行一次"); classA.addA(); } } classB["connList"] = []; module.exports = classB;
class C:指针
class classC {} classC["ccc"] = []; module.exports = classC;
此时A引用了B、C ,B引用了A,C都没用引用A B
当执行node classA时,就有了如下结果;code
//{} //{ [Function: classC] ccc: [] } //{ [Function: classB] connList: [] }
testRequire.js类:对象
console.log("执行一次");
testRequireExec:内存
require("./testRequire"); require("./testRequire"); require("./testRequire");
控制台结果:io
softwaredeMacBook-Pro:test software$ node testRequireExec.js 执行一次
nodejs在加载module的时候只会加载一次,而后把当前module缓存起来
vars:
let a = 0; let obj = { propa: 1, fn: function(params) {}, add: function(params) { this.propa++; } }; obj["connList"] = []; exports.obj = obj; exports.a = a;
envA:
let vars = require("./vars"); let b = vars.a; b++; vars.a = vars.a + 1; let Aobj = vars.obj; vars.obj["connList"].push("A"); Aobj["connList"].push("A-extend");
envB:
let vars = require("./vars"); vars.a = vars.a + 1; vars.obj["connList"].push("B");
varsExec.js
require("./envA"); require("./envB"); require("./envA"); require("./envA"); let vars = require("./vars"); console.log("a:" + vars.a); console.log("obj:"); console.log(vars.obj);
控制台结果:
a:2 obj: { propa: 1, fn: [Function: fn], add: [Function: add], connList: [ 'A', 'A-extend', 'B' ] }
综合了上面模块moudle require,值变量 对象变量知识 的一个demo