Maison > interface Web > js tutoriel > Explication détaillée des types de variables Javascript et exemples de portée

Explication détaillée des types de variables Javascript et exemples de portée

伊谢尔伦
Libérer: 2017-07-18 09:59:29
original
1275 Les gens l'ont consulté

1. La portée des variables Javascript est divisée en blocs de méthode (c'est-à-dire divisée par une paire d'accolades {} en fonction). N'oubliez pas qu'il s'agit d'un bloc fonctionnel, et les blocs for, while et if ne sont pas la norme pour diviser la portée. Vous pouvez consulter les exemples suivants :


<script>
function test2(){
  alert ("before for scope:"+i);  // i未赋值(并不是未声明!使用未声明的变量或函数全抛出致命错误而中断脚本执行)
                          // 此时i的值是underfined
  for(var i=0;i<3;i++){
    alert("in for scope:"+i); // i的值是 0、1、2, 当i为3时跳出循环
  }
  alert("after for scope:"+i); // i的值是3,注意,此时已经在for scope以外,但i的值仍然保留为3  
  while(true){
    var j = 1;
    break;
  }
  alert(j);  // j的值是1,注意,此时已经在while scope以外,但j的值仍然保留为1
  if(true){
    var k = 1;
  }
  alert(k); //k的值是1,注意,此时已经在if scope以外,但k的值仍然保留为1
}
test2();
//若在此时(function scope之外)再输出只存在于test2 这个function scope里的 i、j、k变量会发生神马效果呢?
alert(i); //error! 没错,是error,原因是变量i未声明(并不是未赋值,区分test2函数的第一行输出),导致脚本错误,程序到此结束!
alert("这行打印还会输出吗?"); //未执行
alert(j); //未执行
alert(k); //未执行
</script>
Copier après la connexion
.

2. Avant l'exécution, Javascript effectuera une analyse complète de la partie déclaration de l'ensemble du fichier de script (y compris les variables locales) pour déterminer la portée des variables réelles. Comment le comprendre ? Regardez l'exemple suivant :


<script>
  var a =1;
  function test(){
    alert(a); //a为undefined! 这个a并不是全局变量,这是因为在function scope里已经声明了(函数体倒数第4行)一个重名的局部变量,
           //所以全局变量a被覆盖了,这说明了Javascript在执行前会对整个脚本文件的定义部分做完整分析,所以在函数test()执行前,
           //函数体中的变量a就被指向内部的局部变量.而不是指向外部的全局变量. 但这时a只有声明,还没赋值,所以输出undefined。
    a=4    
    alert(a); //a为4,没悬念了吧? 这里的a还是局部变量哦!
    var a;   //局部变量a在这行声明
    alert(a); //a还是为4,这是因为之前已把4赋给a了
  }
  test();
  alert(a); //a为1,这里并不在function scope内,a的值为全局变量的值
</script>
Copier après la connexion

3. Lorsque la variable globale a le même nom que la variable locale, la portée de la variable locale écrasera la portée de la variable globale.En quittant la variable locale Après avoir modifié la portée de la variable, elle revient à la portée de la variable globale Lorsque la variable globale rencontre la variable locale, comment utiliser la variable globale ? Utilisez window.globalVariableName.


<script>
  var a =1;
  function test(){  
    alert(window.a); //a为1,这里的a是全局变量哦!
    var a=2;   //局部变量a在这行定义
    alert(a); //a为2,这里的a是局部变量哦!
  }
  test();
  alert(a); //a为1,这里并不在function scope内,a的值为全局变量的值
</script>
Copier après la connexion

Portée des variables

1 Selon la portée, il existe deux types de variables : les variables globales et variables locales. Les variables définies dans une fonction sont des variables locales et les variables locales ne sont valides que dans la fonction. Si la variable locale et la variable globale utilisent le même nom de variable, la variable locale écrasera la variable globale

<script>   
    //定义全局变量test   
    var test = "全局变量";    
    function checkscope(  )   
    {   
        var test = "局部变量";   
        alert(test);   
    }   
    checkscope(  );    
//在函数里定义的变量为局部变量,局部变量只在函数内有效。   
//如果局部变量和全局变量用相同的变量名,则局部变量将覆盖全局变量   
</script>
Copier après la connexion

2 Le langage JavaScript n'a pas de portée de bloc

<script>   
    function test(o)       
    {   
        //定义变量i,变量i的作用范围是整个函数   
            var i = 0;   
        if (typeof o == "object")    
        {   
            //定义变量j,变量j的作用范围是整个函数内,而不是if块内。   
                var j = 5;   
                for(var k = 0; k < 10; k++)   
                {   
                //k的作用范围是整个函数内,而不是循环体内   
                    document.write(k);   
                }   
        }      
        //即使出了循环体,k的值依然存在   
        alert(k + "\n" + j);    
    }   
    test(document);   
</script>
Copier après la connexion
.

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