有些知識時間久了就忘了,可是對編程又很重要,仍是記錄下來的好,總結很重要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