Maison > Article > interface Web > Compréhension des exemples let et var dans javascript MDN
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!