• 关于js中的全局变量和局部变量


    在学习JS的变量作用域时,发现的一些奇怪现象。记录如下:

     1 //全局变量:在全局作用域下的变量
     2     //局部变量:在函数内部声明的变量
     3     //注意:
     4         //1、在函数内部没有var声明直接赋值的变量也是全局变量
     5         //2、当变量名重复时,选择就近原则访问
     6     var num0 = 0;
     7     var num1 = 10;
     8     function f4() {
     9         var num2 = 20;
    10         num3 = 30;
    11         num0 = 0.1; // 给局部变量赋值
    12         console.log(num0); //0.1  局部变量
    13         console.log(num1); //undefined   局部变量,下方声明并赋值,这里显示未赋值
    14         console.log(num2); //20 局部变量
    15         console.log(num3); //30 全局变量 因为num3未声明
    16         var num0; //声明了num0,所以是局部变量
    17         var num1 = 11; //声明并赋值
    18         console.log(num1); //11 局部变量
    19         var num4 = 40;
    20         console.log(num4); //40
    21         num4 = 44; // 前面已经声明,所以是局部变量
    22         console.log(num4); //44
    23     }
    24     f4();
    25     console.log(num0);//0
    26     console.log(num1);//10
    27     console.log(num2); //error
    28     console.log(num3); //30
    29     console.log(num4); //error

    后来发现这是由于js的预解析处理模式导致的。

     js引擎运行js分为两步:预解析+代码执行
      1、预解析:js引擎会把js里面的所有的var(变量解析)和function(函数解析)提升到当前作用域的最前面;
      2、代码执行:顺序执行

    如:
      f5(); //预解析后,在函数上面也可调用,这在python中可不行哦。
      function f5() {
      }
      f5();

      f6();//报错
      var f6 = function () {
      };
      f6();

    相当于:

      var f6;

      f6();

      f6 = function () {

      };

  • 相关阅读:
    ParamCount、ParamStr
    写一个可拖动的 TShape 回复 "韦韦" 的问题
    读十六进制文本到 Btye 数组的函数 回复 "峰哥!!!" 的问题
    网站速度优化
    [新功能]新增分类浏览页面
    [CN.Text开发笔记]嵌套Repeater的问题
    中秋祝福
    10 Golden rules for publishing your blog
    HttpCompressionModule 6的一个Bug及使用效果
    [CN.Text开发笔记]OnInit与运行期数据绑定
  • 原文地址:https://www.cnblogs.com/wangyi0419/p/13070224.html
Copyright © 2020-2023  润新知