編程-萌新知識

簡況

有些知識時間久了就忘了,可是對編程又很重要,仍是記錄下來的好,總結很重要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變化不會互相受影響緩存

nodejs兩個模塊互相引用的問題

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: [] }

nodejs require只引用一次

testRequire.js類:對象

console.log("執行一次");

testRequireExec:內存

require("./testRequire");
require("./testRequire");
require("./testRequire");

控制檯結果:io

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

相關文章
相關標籤/搜索