zoukankan      html  css  js  c++  java
  • JavaScript的全局变量与局部变量解析

    一、JavaScript scope 的划分标准是function函数块,不是以 if、while、for来划分的

    <script>
    function f1(){
         alert("before for scope:"+i);       
     //i未赋值(并不是没有声明!使用未声明变量或函数会导致致命错误从而中断脚本执行)
     //此时i值为undefined
          forvar i=0; i<3;i++){
                 alert("in for scope:"+i);}
      //i的值是0,1,2    
          alert(“after for scope:”+1);
       //i的值是3,此时已经在for scope之外,但i的值仍然保留为3
           whiletrue){
                  var j=1;
                  break;}
           alert(j);
       //j的值是1,此时已经在while scope之外,但j的值仍然保留为1
           iftrue){
               var k=1;
           }
           alert(k);
       //k的值为1,此时已经在if scope之外,但k的值仍保留为1
    }
    f1();
    //此时在函数块外调用函数,再次输出存在于f1这个function scope里的i j k变量
    alert(i);
    //error!!!原因是这里的i未声明(不是未赋值,区别f1的第一行输出),脚本错误,程序结束!
    alert(j);       
    //未执行
    alert(k);
    //未执行
    </script>

    二、JavaScript在执行之前会对整个脚本文件进行预编译(对脚本文件的声明部分做分析,包括局部变量部分),从而确定实变量的作用域。举个例子在下边:

    <script>
         var x=1;
         function f2(){
            alert(x);
          //x的值为undefined!这个x并不是全局变量,因为在function scope已经又声明了一个重名的局部变量,所以全局变量的参数a被覆盖了。
    说明了JavaScript在执行前会进行预编译,函数体内的x就被指向局部变量,而不是全局变量。此时x只有声明,没有赋值,所以为undefined
    x=3; alert(x); //x值为3.但还是局部变量 var x; //局部变量x在这里声明 alert(x); //值为3 } f2(); alert(x); //x值为1,并不是在function scope内,x的值为全局变量的值。 </script>

    三、当全局变量跟局部变量重名时,局部变量的scope会覆盖掉全局变量的scope,当离开局部变量的scope后,又重回到全局变量的scope,而当全局变量遇上局部变量时,

      怎样使用全局变量呢?用window.globalVariableName

    <script>
          var  a=1;
           function f3(){
                  alert(window.a);
        //a位1,这里的a是全局变量
                  var  a=2;
                   alert(a);
               }
           f3();
           alert(a);
    </script>
  • 相关阅读:
    [Trie][并查集]JZOJ 5822 量子纠缠
    [模拟]JZOJ 5820 非法输入
    SAM模板
    [树形DP]JZOJ 5819 大逃杀
    [MST][dij]JZOJ 5818 做运动
    [暴力]JZOJ 5817 抄代码
    [概率期望][树形DP][LCA]JZOJ 5814 树
    认证组件
    注册接口
    视图家族 & 路由组件
  • 原文地址:https://www.cnblogs.com/qjqcs/p/5319802.html
Copyright © 2011-2022 走看看