Maison  >  Article  >  interface Web  >  Compréhension des exemples let et var dans javascript MDN

Compréhension des exemples let et var dans javascript MDN

黄舟
黄舟original
2017-03-20 14:37:261632parcourir

Ceci est un exemple de javascript MDN
Le but est d'illustrer la problématique de la portée let.

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

Mais généralement, nous ne définissons pas un constructeur comme celui-ci.
Alors je l'ai réécrit.

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

Vous pouvez voir que nous ne pouvons pas accéder directement à privateScope.hiddenProperty, si nous le modifions comme ceci.

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

alors le résultat devient

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

et vous pouvez voir que le résultat reste inchangé.
Dans le constructeur, qu'il soit var ou let, sa portée est la même, et ce sont toutes des variables privées.

Nous utilisons toujours l'exemple dans MDN. Remplacez let par var

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

et vous pouvez voir que console.log a des résultats au lieu d'erreurs.

Mais en général, nous utilisons toujours des modèles communs pour définir un constructeur. Cet exemple a été écrit spécifiquement pour expliquer la différence entre let et var. Ce n'est donc pas représentatif.
Dans le mode couramment utilisé, il n'y a pas de différence entre let et var. Ce sont toutes deux des variables privées du constructeur et ont la même portée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn