Maison  >  Article  >  interface Web  >  Introduction à la portée des variables dans les astuces JavaScript_javascript

Introduction à la portée des variables dans les astuces JavaScript_javascript

WBOY
WBOYoriginal
2016-05-16 16:22:571346parcourir

Pour la portée des variables, des langages tels que C et Java adoptent la méthode "block scope". À la différence de cela, JavaScript adopte une approche de « portée de fonction » : la portée d'une variable est uniquement déterminée par la fonction dans laquelle elle se trouve et n'a rien à voir avec des blocs logiques tels que if et for. Par exemple, l'exemple suivant montre le comportement de JavaScript qui est différent de celui de C, Java et d'autres langages :

Copier le code Le code est le suivant :

fonction(){
var s = 42;//s est visible tout au long de la fonction
si (s > 3) {
var x = "test";//x est visible dans toute la fonction
pour(var je=0; je<10; je ){
console.log(i);
>
console.log(i);//i est visible tout au long de la fonction
>
console.log(i);
console.log(x);
>

Dans les langages à « portée de bloc » tels que C et Java, après la fin des blocs logiques tels que les instructions if et for, les variables définies dans ces blocs logiques seront détruites. JavaScript est différent. Tant qu'une variable est définie dans une fonction, tout le code de la fonction entière peut accéder à la variable, même si ces codes sont antérieurs à la définition de la variable :

Copier le code Le code est le suivant :

fonction(){
console.log(a);//undéfini
var a = "test";
console.log(a);//test
>

Dans l'exemple ci-dessus, si une fonction in n'a jamais été définie, console.log(a) lancera une ReferenceError. Lorsque a est défini dans une fonction, même si la définition est après l'instruction d'appel de la variable a, l'appel à a est une opération légale (si la définition d'une variable se produit après l'instruction d'appel, alors la valeur de la variable a dans l'instruction a l'instruction appelante n'est pas définie). En fait, pour toutes les variables définies avec le mot-clé var au sein d'une fonction, l'opération de définition sera amenée au début de la fonction (l'opération d'affectation restera toujours sur la ligne où var est défini). C'est ce qu'on appelle le levage en JavaScript. Par exemple, le code ci-dessus est équivalent à :

Copier le code Le code est le suivant :

fonction(){
var a;
console.log(a);//undéfini
a = "tester";
console.log(a);//test
>

Chaîne de variables de portée

Contact Stockage des variables en JavaScript, vous pouvez avoir une bonne compréhension de la "portée de la fonction" et du levage en JS. Puisque les variables sont stockées dans l'objet global ou l'objet d'appel de fonction, lorsqu'une variable est définie dans une fonction, peu importe où la variable est définie dans la fonction, il y aura inévitablement un objet d'appel de fonction avec cette valeur dans l'objet d'appel de fonction. . Une propriété portant le même nom que la variable. De cette façon, la variable est accessible depuis n’importe où dans la fonction.

En ce qui concerne les appels de fonction, il existe un concept plus intéressant en JavaScript : la chaîne de portée des variables - parce que les variables sont stockées dans l'objet global ou l'objet d'appel de fonction, lorsque vous accédez à la variable, vous pouvez y accéder à partir de plusieurs objets. Obtenez la valeur. Prenons comme exemple le code suivant :

Copier le code Le code est le suivant :

var x = "tester";
fonction(){
//fonction de niveau 1
var x = "temp";
fonction(){
//fonction niveau 2
var x = "réel";
//essayez d'accéder à x ici. x sera "réel".
>
>

À l'intérieur de la fonction de niveau 2 dans le code ci-dessus, lorsque vous essayez d'accéder à la variable x, le programme peut rechercher la valeur d'attribut correspondante à partir de 3 objets : l'objet d'appel de fonction utilisé pour appeler la fonction de niveau 2, Appel de fonction objets et objets globaux utilisés pour appeler des fonctions de niveau 1 - Sur la base de la relation imbriquée des définitions de fonctions, JavaScript générera une chaîne d'objets composée d'objets globaux et d'objets d'appel de fonction. Lors de l'accès à une variable, le programme commencera la recherche à partir de l'objet le plus proche de l'instruction d'accès. Si aucune recherche n'est trouvée, la recherche se poursuivra dans l'objet au niveau supérieur de la chaîne d'objets jusqu'à l'objet global.

Parce que cette chaîne d'objets est liée à la portée de la variable, elle est également appelée « chaîne de portée ».

Si vous devez modifier temporairement la chaîne de portée et insérer un objet à l'avant de la chaîne de portée (en tant que premier objet fonction accédé), vous pouvez utiliser l'instruction with :

Copier le code Le code est le suivant :

avec(o){
//le code utilise les propriétés de l'objet o.
>

Cependant, en mode strict JavaScript, l'instruction with est désactivée même en mode non strict, l'utilisation de l'instruction with n'est pas recommandée ;

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