Maison > interface Web > js tutoriel > le corps du texte

Compréhension des exemples let et var dans javascript MDN

黄舟
Libérer: 2017-03-20 14:37:26
original
1634 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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

var privateScope = {}; // 把let 换成var
Copier après la connexion

alors le résultat devient

console.log(privateScope.hiddenProperty); //ReferenceError: privateScope is not defined
Copier après la connexion

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
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!