Zwei Möglichkeiten zum Deklarieren privater Variablen in JavaScript

Zwei Möglichkeiten zum Deklarieren privater Variablen in JavaScript

Vorwort

JavaScript unterscheidet sich von anderen Sprachen dadurch, dass es Schlüsselwörter zum Deklarieren privater Variablen verwenden kann.
Ich kenne zwei Möglichkeiten zum Deklarieren privater Variablen in JavaScript: Eine besteht in der Verwendung von Closures, die andere in der Verwendung von WeakMap.

Verschlüsse

Es gibt viele Möglichkeiten, Abschlüsse zu beschreiben, zum Beispiel:
Funktionen, die auf den Umfang anderer Funktionen zugreifen können;
Eine Brücke für innere Funktionen, um auf äußere Funktionsbereiche zuzugreifen;
......

Die Logik der Verwendung von Closures zum Erstellen privater Variablen lautet:
1. Deklarieren Sie Variablen und interne Funktionen in externen Funktionen;
2. Verwenden Sie interne Funktionen, um auf Variablenwerte zuzugreifen oder diese zu ändern.
3. Geben Sie die innere Funktion in der äußeren Funktion zurück.

Funktion außerhalb(){
	sei val = 123;
	Funktion innerhalb(){
		Rückgabewert;
	}
	zurück nach drinnen;
}
console.log(draußen()());//123

Das obige Beispiel gibt uns eine allgemeine Vorstellung von der Logik der Verwendung von Closures zum Erstellen privater Variablen, reicht jedoch nicht aus, um die Bedeutung privater Variablen widerzuspiegeln. Eine const-Variable kann auch den Effekt des obigen Codes erzielen:

//Darauf kann zugegriffen, aber es kann nicht geändert werden, wodurch der Effekt des obigen Codes erzielt wird const val = 123;
console.log(Wert);//123

Der folgende Code verdeutlicht insbesondere die Bedeutung privater Variablen:

Funktion Person () { 
 let _name = "unbekannt";
 sei _Alter = 18;
 let _sex = 'Mann';

 Funktion setzeName(Name){
  _name = Name || 'unbekannt';
 }

 Funktion getName(){
  gibt _name zurück;
 }

 Funktion setAge(Alter){
  wenn(Typ des Alters === 'Zahl'){
   _Alter = Math.floor(Alter);
  }anders{
   Fehler auslösen("Typ des Alters !== 'Zahl'");
  }
 }

 Funktion getAge(){
  gib _age zurück;
 }

 Funktion setzeGeschlecht(Geschlecht){
  wenn(Geschlecht === 'Mann' || Geschlecht === 1){
   _sex = 'Mann';
  }sonst wenn(Geschlecht === 'Frau' || Geschlecht === 0){
   _sex = 'Frau';
  }anders{
   throw Error('Eingabefehler');
  }
 }

 Funktion getSex(){
  gib _sex zurück;
 }

 zurückkehren {
  setName : setName,
  getName : getName,
  Alter festlegen: Alter festlegen,
  getAge : getAge,
  Geschlecht festlegen: Geschlecht festlegen,
  Sex bekommen: Sex bekommen
 }
}

sei xiaoming = person();
lass xiaohong = person();
xiaoming.setName('xiaoming');
xiaohong.setName('xiaohong');
console.log('xiaoming-Name: ' + xiaoming.getName());//xiaoming-Name: xiaoming
console.log('xiaohong-Name: ' + xiaohong.getName());//xiaohong-Name: xiaohong

xiaoming.setAge(19.3333);
xiaohong.setAge('16');//Nicht abgefangener Fehler: typeof age !== 'number'
console.log('xiaoming Alter: ' + xiaoming.getAge());//xiaoming Alter: 19
console.log('xiaohong Alter: ' + xiaohong.getAge());//xiaohong Alter: 18


xiaoming.setSex(1);
xiaohong.setSex('Frau');
console.log('Xiaoming Geschlecht:' + xiaoming.getSex());//Xiaoming Geschlecht: Mann
console.log('xiaohong Geschlecht: ' + xiaohong.getSex());//xiaohong Geschlecht: Frau

Aus dem obigen Code können wir ersehen, dass wir, wenn wir die Werte der drei Variablen _name, _age und _sex festlegen oder abrufen möchten, nur die festen Methoden wie setName, getName, setAge, getAge, setSex, getSex usw. verwenden können und dass in allen Setter-Methoden die formalen Parameter beurteilt werden. Dies bedeutet, dass alle Vorgänge am Objekt unter Kontrolle sind, was einige der negativen Auswirkungen von JavaScript als schwach typisierte Sprache bis zu einem gewissen Grad abschwächt.

Schwache Karte

Wenn Sie nicht viel über WeakMap wissen, können Sie zunächst die ausführliche Einführung zu WeakMap lesen.
Der Hauptpunkt hierbei ist, dass der Schlüssel von WeakMap nicht aufzählbar ist.

let nameWeakMap = neue WeakMap();
let ageWeakMap = neue WeakMap();
lass sexWeakMap = neue WeakMap();

Funktion Person () {
 let _hash = Objekt.create(null);
 nameWeakMap.set(_hash,'unbekannt');
 AlterWeakMap.set(_hash,18);
 sexWeakMap.set(_hash,'Mann');
 Funktion setzeName(Name){
  nameWeakMap.set(_hash,name || 'unbekannt');
 }

 Funktion getName(){
  gibt den NamenWeakMap zurück.get(_hash);
 }

 Funktion setAge(Alter){
  wenn(Typ des Alters === 'Zahl'){
   AlterWeakMap.set(_hash,Math.floor(Alter));
  }anders{
   Fehler auslösen("Typ des Alters !== 'Zahl'");
  }
 }

 Funktion getAge(){
  gibt ageWeakMap.get(_hash) zurück;
 }

 Funktion setzeGeschlecht(Geschlecht){
  wenn(Geschlecht === 'Mann' || Geschlecht === 1){
   sexWeakMap.set(_hash,'Mann');
  }sonst wenn(Geschlecht === 'Frau' || Geschlecht === 0){
   sexWeakMap.set(_hash,'Frau');
  }anders{
   throw Error('Eingabefehler');
  }
 }

 Funktion getSex(){
  gibt sexWeakMap.get(_hash) zurück;
 }

 zurückkehren {
  setName : setName,
  getName : getName,
  Alter festlegen: Alter festlegen,
  getAge : getAge,
  Geschlecht festlegen: Geschlecht festlegen,
  Sex bekommen: Sex bekommen
 }
}

sei xiaoming = person();
lass xiaohong = person();
xiaoming.setName('xiaoming');
xiaohong.setName('xiaohong');
console.log('xiaoming-Name: ' + xiaoming.getName());//xiaoming-Name: xiaoming
console.log('xiaohong-Name: ' + xiaohong.getName());//xiaohong-Name: xiaohong

xiaoming.setAge(19.3333);
xiaohong.setAge('16');//Nicht abgefangener Fehler: typeof age !== 'number'
console.log('xiaoming Alter: ' + xiaoming.getAge());//xiaoming Alter: 19
console.log('xiaohong Alter: ' + xiaohong.getAge());//xiaohong Alter: 18


xiaoming.setSex(1);
xiaohong.setSex('Frau');
console.log('Xiaoming Geschlecht:' + xiaoming.getSex());//Xiaoming Geschlecht: Mann
console.log('xiaohong Geschlecht: ' + xiaohong.getSex());//xiaohong Geschlecht: Frau

Der gleiche Effekt wird durch die Erstellung privater Variablen erzielt. WeakMap wird übrigens zum Erstellen privater Variablen in der Klasse verwendet.

Abschluss

Dieser Artikel dokumentiert lediglich, was ich über die Methoden und Funktionen zum Erstellen privater Variablen in JavaScript weiß. Wenn Fehler oder Auslassungen vorliegen, weisen Sie mich bitte darauf hin. Vielen Dank.

Oben sind die Details der beiden Möglichkeiten zum Deklarieren privater Variablen in JavaScript aufgeführt. Weitere Informationen zum Deklarieren privater Variablen in JavaScript finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • JavaScript Advanced (I) Verbesserung der Variablendeklaration Beispielanalyse
  • Detaillierte Erklärung des Unterschieds zwischen let- und var-Deklarationsvariablen in js
  • Detaillierte Erklärung des Unterschieds zwischen der Verwendung und Nichtverwendung von var in der js-Variablendeklaration
  • Unterschied zwischen JavaScript-Funktionsdeklaration und Variablendeklaration
  • Eine kurze Analyse der JavaScript-Variablendeklaration
  • Kennen Sie die Variablendeklaration in JavaScript?

<<:  Linux löscht automatisch Protokolle und Beispielbefehle von vor n Tagen

>>:  Flussdiagramm für den Webserverzugriff auf HTTP und HTTP-Zusammenarbeit

Artikel empfehlen

Zusammenfassung der MySQL-Funktionsmethode LOAD_FILE()

In MySQL liest die Funktion LOAD_FILE() eine Date...

Eine kurze Analyse des Kimono-Memo-Problems

Heute musste ich nach dem Neustart des Spiels fes...

Detaillierte Erläuterung der langsamen MySQL-Protokollabfrage

Langsame Protokollabfragefunktion Die Hauptfunkti...

Docker-Kern und spezifische Verwendung der Installation

1. Was ist Docker? (1) Docker ist ein Open-Source...

4 Möglichkeiten zum Anzeigen von Prozessen in LINUX (Zusammenfassung)

Ein Prozess ist ein Programmcode, der in der CPU ...

Lösung für dieselbe IP nach dem Klonen der virtuellen Ubuntu 18-Maschine

Vorwort Ich habe vor Kurzem eine virtuelle Maschi...

MySQL deaktiviert die Überprüfung der Kennwortstärke

Informationen zur Überprüfung der Kennwortstärke:...

So migrieren Sie SQLite zu einem MySQL-Skript

Ohne weitere Umschweife werde ich den Code direkt...

Prozessdiagramm für die Ideenbereitstellung und Tomcat-Dienstimplementierung

Konfigurieren Sie zunächst die Projektartefakte K...