简况
有些知识时间久了就忘了,但是对编程又很重要,还是记录下来的好,总结很重要
值变量与对象变量
//对象变量
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变化不会互相受影响
nodejs两个模块互相引用的问题
classA:
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:
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时,就有了以下结果;
//{}
//{ [Function: classC] ccc: [] }
//{ [Function: classB] connList: [] }
nodejs require只引用一次
testRequire.js类:
console.log("执行一次");
testRequireExec:
require("./testRequire");
require("./testRequire");
require("./testRequire");
控制台结果:
softwaredeMacBook-Pro:test software$ node testRequireExec.js
执行一次
nodejs在加载module的时候只会加载一次,然后把当前module缓存起来
nodejs moudle的值在外部的影响
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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。