• JS的全局变量与局部变量及变量的提升


    遇到全局变量与局部变量的时候总是出一些或多或少的问题,于是专门花时间去认真研究了一下全局变量与局部变量。

    这是在网上看到的一个关于全局变量与局部变量的代码,看了下作者的解析,自己也进行了研究。

     1 <script>  
     2    var a =1;  
     3    function test(){  
     4       alert(a);  
     5       var a = 2;  
     6       alert(a);  
     7    }  
     8    test();  
     9    alert(a);  
    10 </script>

    第一反应的输出结果应该是1  2  1,其实结果不对(正确的运行结果 undefined 2 1),真实的代码执行顺序应为

    <script>  
       var a =1;  
       function test(){  
          var = a;
          alert(a);  
          a = 2;  
          alert(a);  
       }  
       test();  
       alert(a);  
    </script>    

    根据预编译:

    1、只有关键字函数会进行声明提前 字面量函数不会被提前的
    2、所以变量会提升执行代码的最顶部,变量的值只会在原地等赋值给变量(赋值语句不会被提升)
    3、如果全局变量和局部变量是一个变量名的话 在函数内部优先考虑就近原则;

      简单的说就是var的提升

      如var a = 1;

      把var定义的变量提升到script的最上方    var = a;(此处定义在function内部所以为局部变量)

      赋值语句不会被提升(哪怕=后面是一个function)   a = 1;

      所以就导致了a先被定义而没赋值所以输出第一个为undefined

      到第二个输出的时候此时 a = 2; a已经被赋值为2了,所以输出第二个为2

      第三个输出时 此时已经跳出了function ,输出的a,计算机就找到了一开始定义的全局变量  var a =1; ,所以输出第三个为1

    Javascript的变量的scope是根据方法块来划分的  其中 只有function会对局部变量与全局变量产生影响

    也就是说,在function中定义的变量不能跳出function的{ }

    而在while、for、if中定义并使用的变量是可以跳出{ }的

     1 <script type="text/javascript">
     2 
     3       
     4     function test(){
     5         var a = 1; 
     6     }
     7     alert(a); //报错:a is not defined,因为a是没有跳出function
     8 
     9     for(var i=1;i<=3;i++){
    10         alert(i); //依次显示 1  2  3
    11     }
    12     alert(i);  //显示 4 很明显此时i跳出了for的{ }
    13 
    14 </script>
  • 相关阅读:
    Java Web应用服务器Resin 国内下载
    pycharm-community-3.1.1.tar.gz下载
    兴奋、强类型版的PHP语言
    Unity3D 5中增加WebGL 播放插件
    SQL语句优化汇总(上) 感动啊 学习 收藏了
    查看数据库中那些表被锁了,那些阻塞了 并且如何杀死该进程
    服务器放在不同省份的IDC机房,数据如何同步?一个域名如何动态解析到不同IP的服务器
    美女视频主持 页面右下角弹窗美女介绍
    mvc和三层架构到底有什么区别
    juicer模板引擎使用
  • 原文地址:https://www.cnblogs.com/Code-Inconnu/p/7384285.html
Copyright © 2020-2023  润新知