Maison  >  Article  >  interface Web  >  Discutez de quelques techniques d'utilisation des types de variables JavaScript

Discutez de quelques techniques d'utilisation des types de variables JavaScript

伊谢尔伦
伊谢尔伦original
2017-07-18 10:41:541565parcourir

JS prend en charge les types de variables suivants : variables locales, variables de classe, variables privées, variables d'instance, variables statiques et variables globales.

Variables locales :
Les variables locales font généralement référence à des variables valides dans la portée de {}, c'est-à-dire des variables valides dans le bloc d'instructions, telles que :

function foo(flag)  
{  
 var sum = 0;  
 if(flag == true)  
 {  
  var index;  
  for(index=0;index<10;index++)  
  {  
   sum +=index;  
  }  
}  
 document.write("index is :"+index+"<br>");  
 return sum;  
}  
//document.write("sum is :" +sum+"<br>");  
document.write("result is :"+foo(true)+"<br>");

Une fois le code exécuté, les résultats de sortie sont : "l'index est :undéfini" et "le résultat est :0". Nous pouvons voir que la valeur de la variable d'index que nous voulons afficher n'est pas définie, c'est-à-dire indéfini. Par conséquent, nous pouvons constater que la variable d'index est détruite après la fin du bloc d'instruction if. Qu'en est-il de la variable « somme » ? Cette variable est détruite après l'exécution de la section de fonction foo(). Si vous supprimez l'instruction que j'ai commentée et l'exécutez à nouveau, vous constaterez que le système signalera une erreur. Il convient de noter que si je modifie la fonction foo() ci-dessus comme suit :

function foo(flag)  
 {  
  var sum = 0;  
  for(var index=0;index<10;index++)  
  {  
   sum +=index;  
  }  
  document.write("index is :"+index+"<br>");  
  return sum;  
}

Vous pourrez voir que la valeur de l'index peut être affichée ("l'index est :10" ), c'est js Différent des autres langages, car l'index est défini en dehors du {} de la boucle for, sa portée n'est détruite qu'après l'utilisation de la fonction foo().

Variable de classe :
La variable de classe est en fait un attribut ou un champ ou une méthode de la classe. Cette variable est automatiquement détruite après la destruction d'un objet instance de la classe, comme le Student que nous avons mentionné au. genre débutant. Nous n’en discuterons pas beaucoup, vous pouvez l’essayer vous-même.

Variable privée :
La variable privée est un attribut utilisé en interne par une classe et ne peut pas être appelée en externe. Sa définition est déclarée à l'aide de var. Notez que si elle n'est pas déclarée avec var, la variable sera une variable globale (nous en discuterons ci-dessous), telle que :

function Student(name,age,from)  
{  
 this.name = FormatIt(name);  
 this.age = age;  
this.from = from;  
 var origName = name;  
 var FormatIt = function(name)  
 {  
 return name.substr(0,5);  
 }  
 this.ToString = function()  
 {  
  return "my information is name: "+origName+",age : "+this.age+", from :" +this.from;  
 }  
}

Ici, nous avons défini deux origName et FormatIt() privés. Variables (selon l'interprétation orientée objet, elles devraient être appelées attributs de la classe).
Nous appelons également la méthode dans ce cas une variable, car la variable dans ce cas est une variable de type fonction, et la fonction appartient également à la classe d'héritage de la classe Object. Dans ce cas, si l'on définit var zfp = new Student("3zfp",100,"ShenZhen"). Mais ces deux variables ne sont pas accessibles via zfp.origName et zfp.FormatIt().

Notez les points suivants :

1 Les variables privées ne peuvent pas être indiquées par ceci.
2. L'appel à une variable de type méthode privée doit avoir lieu après la déclaration de la méthode. Par exemple, nous transformons la classe Student comme suit :

function Student(name,age,from)  
{  
 var origName = name;  
 this.name = FormatName(name);  
 this.age = age;  
 this.from = from;  
 var FormatName = function(name)  
 {  
  return name+".china";  
 }  
 this.ToString = function()  
 {  
  return "my information is name: "+origName+",age : "+this.age+", from :" +this.from;  
 }  
}  
var zfp = new Student("3zfp",100,"ShenZhen");

Une fois le code exécuté, une erreur "objet non trouvé" sera signalée. Cela signifie que FormatName() n'est pas défini.

3. Les méthodes privées ne peuvent pas accéder à la variable (variable publique) indiquée par ceci, comme suit :

function Student(basicinfo)  
{  
 this.basicInfo = basicinfo;  
 var FormatInfo = function()  
 {  
  this.basicInfo.name = this.basicInfo.name+".china";  
 }  
 FormatInfo();  
}  
function BasicInfo(name,age,from)  
{  
 this.name = name;  
 this.age = age;  
 this.from = from;  
}  
var zfp = new Student(new BasicInfo("3zfp",100,"ShenZhen"));

Après avoir exécuté le code, le système demandera "this.basicInfo est vide ou "Ce n'est pas un objet".
La conclusion de base est que les méthodes privées ne peuvent accéder qu'aux propriétés privées. Les propriétés privées sont accessibles n'importe où dans la classe après avoir été déclarées et attribuées.

Variables statiques :
Les variables statiques appartiennent à une classe. Attributs détenus, accédez à cet attribut via le nom de la classe + "." + le nom de la variable statique. Une explication claire peut être donnée comme suit :

function BasicInfo(name,age,from)  
{  
 this.name = name;  
 this.age = age;  
 this.from = from;  
}  
BasicInfo.generalInfo = "is 3zfp owned object";  
var basic = new BasicInfo("zfp",100,"ShenZhen");  
document.write(basic.generalInfo+"<br>");  
document.write(BasicInfo.generalInfo+"<br>");  
BasicInfo.generalInfo = "info is changed";  
document.write(BasicInfo.generalInfo+"<br>");

Lorsque vous exécutez le code ci-dessus, vous obtiendrez les résultats suivants :

undefined 
is 3zfp owned object 
info is changed

Notez ce qui suit points :
1 , déclarez une variable statique sous la forme d'un nom de classe + "." + nom de la variable statique
2. Les variables statiques ne sont pas des attributs uniques à un objet instance de la classe, mais sont partagées par l'objet. .
3 , accessible par le nom de l'objet d'instance + "." + nom de la variable statique.

Variables globales :
Les variables globales sont des variables qui ont un contrôle d'accès efficace pendant le fonctionnement de l'ensemble du système. Elles sont généralement définies au début d'un code js, telles que :

var copyright = "3zfp owned";  
var foo =function()  
{  
 window.alert(copyright);  
}

Notez les points suivants :
1. Si une variable est déclarée sans var, elle est considérée comme une variable globale. Par exemple :

var copyright = "3zfp owned"; 
var foo =function(fooInfo) 
{ 
 _foo = fooInfo; 
document.write(copyright+"<br>"); 
} 
new foo("foo test"); 
document.write(_foo+"<br>"); 
执行代码,将得到如下结果: 
3zfp owned 
foo test 
但是,这个又有一个注意的地方,function是编译期对象,也就是说_foo这个全局变量要在foo对象被实例化后才能被初始化,也就是说如果将 
new foo(); 
document.write(_foo+"<br>"); 
对调成 
document.write(_foo+"<br>"); 
new foo(); 
系统将提示 "_foo 未定义"。

2. Si vous définissez un attribut de variable locale avec le même nom que la variable globale, comme suit :

var copyright = "3zfp owned";  
var foo =function(fooInfo)  
{  
 var copyright = fooInfo; //同名变量  
 this.showInfo = function()  
 {  
 document.write(copyright+"<br>");  
 }  
}  
new foo("foo test").showInfo();  
document.write(copyright+"<br>");

Exécutez le code, vous obtiendra les résultats suivants :
3zfp appartient
foo test
La raison est que la définition des variables de fonction est terminée lors de la compilation, c'est-à-dire que la définition du droit d'auteur à l'intérieur de foo est terminée lors de la compilation, et sa portée n'est valable que dans l'objet foo et n'a rien à voir avec la variable globale copyright définie en externe.

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