Heim  >  Artikel  >  Web-Frontend  >  Verständnis von let- und var-Beispielen in Javascript MDN

Verständnis von let- und var-Beispielen in Javascript MDN

黄舟
黄舟Original
2017-03-20 14:37:261630Durchsuche

Dies ist ein Beispiel für Javascript MDN
Der Zweck besteht darin, das Problem des let-Bereichs zu veranschaulichen.

var SomeConstructor;{    
let privateScope = {};    
SomeConstructor = function SomeConstructor () {        
this.someProperty = "foo";        
privateScope.hiddenProperty = "bar";    
}    
SomeConstructor.prototype.showPublic = function () {        
console.log(this.someProperty); // foo   
}    
SomeConstructor.prototype.showPrivate = function () {        
console.log(privateScope.hiddenProperty); 
// bar    
}}
var myInstance = new SomeConstructor();
myInstance.showPublic();myInstance.showPrivate();
console.log(privateScope.hiddenProperty);
 // error

Aber normalerweise definieren wir keinen Konstruktor wie diesen.
Also habe ich es umgeschrieben.

function SomeConstructor() {    
this.someProperty = 'foo';    
let privateScope = {};    
privateScope.hiddenProperty = 'bar';    
SomeConstructor.prototype.showPublic = function () {        
console.log(this.someProperty);    
}    
SomeConstructor.prototype.showPrivate = function () {        
console.log(privateScope.hiddenProperty);    
}}var myInstance = new SomeConstructor();
myInstance.showPublic();
//foomyInstance.showPrivate(); 
//barconsole.log(privateScope.hiddenProperty); 
//ReferenceError: privateScope is not defined

Sie sehen, dass wir nicht direkt auf privateScope.hiddenProperty zugreifen können, wenn wir es so ändern.

var privateScope = {}; // 把let 换成var

dann wird das Ergebnis zu

console.log(privateScope.hiddenProperty); //ReferenceError: privateScope is not defined

und Sie können sehen, dass das Ergebnis unverändert bleibt.
Im Konstruktor ist der Umfang unabhängig davon, ob es sich um var oder let handelt, derselbe und es handelt sich bei allen um private Variablen.

Wir verwenden immer noch das Beispiel in MDN.

var SomeConstructor;{    
var privateScope = {};    
SomeConstructor = function SomeConstructor () {        
this.someProperty = "foo";        
privateScope.hiddenProperty = "bar";    
}    
SomeConstructor.prototype.showPublic = function () {        
console.log(this.someProperty); // foo    
}    
SomeConstructor.prototype.showPrivate = function () {        
console.log(privateScope.hiddenProperty); // bar    
}}
var myInstance = new SomeConstructor();
myInstance.showPublic();
myInstance.showPrivate();
console.log(privateScope.hiddenProperty); 
// bar

und Sie können sehen, dass console.log Ergebnisse anstelle von Fehlern ausgibt.

Aber im Allgemeinen verwenden wir immer noch gängige Muster, um einen Konstruktor zu definieren. Dieses Beispiel wurde speziell geschrieben, um den Unterschied zwischen let und var zu erklären. Es ist also nicht repräsentativ.
Im häufig verwendeten Modus gibt es keinen Unterschied zwischen let und var. Sie sind beide private Variablen des Konstruktors und haben den gleichen Gültigkeitsbereich.

Das obige ist der detaillierte Inhalt vonVerständnis von let- und var-Beispielen in Javascript MDN. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn