简况

有些知识时间久了就忘了,但是对编程又很重要,还是记录下来的好,总结很重要

值变量与对象变量

//对象变量
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


吴玉宏
16 声望1 粉丝

萌新


« 上一篇
TCP/IP简单理解
下一篇 »
linux-cmd命令集