Maison  >  Article  >  interface Web  >  Exemple de différence entre la déclaration de variable avec var et sans var dans les compétences JavaScript_javascript

Exemple de différence entre la déclaration de variable avec var et sans var dans les compétences JavaScript_javascript

WBOY
WBOYoriginal
2016-05-16 16:36:281079parcourir

Cet article traite de la différence entre les déclarations de variables en JavaScript avec var et sans var. La portée des déclarations de variables en JS est basée sur les fonctions, nous voyons donc souvent la méthode pour éviter la pollution des variables globales est

(function(){ 
// ... 
})();

Au sein d'une fonction, les variables déclarées avec var et sans var sont différentes. Celles déclarées avec var sont des variables locales, et celles sans var sont déclarées variables globales, vous pouvez donc l'utiliser pour exposer des éléments d'interface au monde extérieur.
Lors de la déclaration d'une variable dans la portée globale, elle a la même apparence avec ou sans var. Nous savons que la variable globale déclarée est l'attribut de window. Qu'elle soit identique ou non, nous utilisons la méthode de requête d'attribut fournie par ECMAScrpit5 pour trouver. dehors.

var fff = 2; 
window.ffa = 3; 
ffb = 4; 
this.ffc = 4; 
var ffftx = Object.getOwnPropertyDescriptor(window, 'fff'); //configurable:false,enumerable:true,value:2,writable:true 
var ffatx = Object.getOwnPropertyDescriptor(window, 'ffa'); //configurable:true,enumerable:true,value:2,writable:true 
var ffbtx = Object.getOwnPropertyDescriptor(window, 'ffb'); //configurable:true,enumerable:true,value:2,writable:true 
var ffctx = Object.getOwnPropertyDescriptor(window, 'ffc'); //configurable:true,enumerable:true,value:2,writable:true

Grâce à ce qui précède, nous avons constaté qu'il y a toujours une différence. Utilisons delete pour supprimer l'attribut afin de vérifier que l'attribut avec la configurabilité de false ne peut pas être supprimé. C'est-à-dire que les attributs de l'objet global déclaré via la variable var ne peuvent pas être supprimés. Nous constaterons également que les attributs de l'objet global créé par la déclaration de fonction ne peuvent pas être supprimés.

delete fff; // 无法删除 
delete ffa; // 可删除 
delete ffb; // 可删除 
delete ffc; // 可删除

La conclusion est qu'il y a une différence entre déclarer des variables globales avec var et sans var.

Il est légal et inoffensif d'utiliser les instructions var pour répéter les instructions de déclaration. Si l'instruction est répétée avec une affectation, elle n'est pas différente d'une instruction d'affectation normale. Si vous essayez de lire une variable non déclarée, JS signalera une erreur.
Dans le cadre des fonctions de JavaScript, les variables déclarées ou les fonctions internes sont visibles dans le corps de la fonction. Cela signifie que la fonction peut être disponible avant d'être définie. Il existe deux manières de définir une fonction, l'une est une expression de définition de fonction et l'autre est une instruction de déclaration de fonction.

// 函数定义表达式 
var fns = function (){ 
// ... 
}; 
// 函数声明语句 
function fns(){ 
// ... 
} 

Les déclarations de fonction sont "avancées" en haut du script externe ou de la portée de la fonction externe, de sorte qu'une fonction déclarée de cette manière peut être appelée par le code qui apparaît avant d'être définie. Dans les expressions de définition de fonction, la déclaration des variables est avancée, mais l'affectation aux variables ne l'est pas. Par conséquent, les fonctions définies dans les expressions ne peuvent pas être appelées avant que la fonction ne soit définie.

(function() { 
testa(); // 打印出testa 
testb(); // 报错:提示undefined is not a function 
console.log(testc); //undefined,如果移到上面就可以了 
function testa() { 
console.log("testa"); 
} 
var testb = function() { 
console.log("tesb"); 
} 
var testc = "testc"; 
})();

Bien sûr, lorsque nous déclarons des variables et des fonctions, nous devons respecter les spécifications de base. Les variables et les fonctions doivent être déclarées à l'avance.

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