zoukankan      html  css  js  c++  java
  • JS基础语法---预解析

    预解析:就是在解析代码之前
     

    1. 预解析做什么事?

    • 把变量的声明提前了----提前到当前所在的作用域的最上面
    • 函数的声明也会被提前---提前到当前所在的作用域的最上面
     
    举例:
        function f1() {
          console.log(num);
          var num = 10;
        }
        f1(); //此时运行结果是undefined

    此时运行结果是undefined,因为预解析,变量声明被提前了,实际按下面的方式解析的:

        function f1() {
          var num
          console.log(num);
          num = 10;
        }
        f1(); //此时运行结果是undefined

    举例2:

        //函数调用的时候,把会函数的声明提升到作用域的上面
        f1();//调用
        var num = 20;//这个变量的声明会提升到变量使用之前
        function f1() {
          console.log(num);
          //var num=10;
        }

    2. 预解析分段和局部作用域的问题

    •     预解析中,变量的提升,只会在当前的作用域中提升,提前到当前的作用域的最上面
    •     函数中的变量只会提前到函数的作用域中的最前面,不会出去
        function f1() {
    
          console.log(num);//undefined
          var num = 10;
        }
        f1();
        console.log(num);//报错
    •     预解析会分段(多对的script标签中函数重名,预解析的时候不会冲突)
      <script>
    
        function f1() {
          console.log("哈哈");
        }
    
      </script>
      <script>
        f1();
        function f1() {
          console.log("嘎嘎");
        }
      </script>

    3. 快速识别预解析的结果

     练习1:

        var a = 25;
        function abc() {
          alert(a);//undefined
          var a = 10;
        }
        abc();
        console.log(a);//25

    练习2:

        console.log(a);
        function a() {
          console.log('aaaaa');
        }
        var a = 1;
        console.log(a);//1

    预解析下的代码解读:

    (变量声明在最上面,下面是函数声明)

        var a;
        function a() {
          console.log('aaaaa');
        }
        console.log(a); //此时输出的是函数a的代码
        a = 1;
        console.log(a);//1

    代码结果:

    练习3:

        var a = 18;
        f1();
        function f1() {
          var b = 9;
          console.log(a);//undefined
          console.log(b);//9
          var a = '123';
        }

    预解析下的代码解读:

       var a;
       a = 18;
       function f1() {
         var b;
         var a;
         b = 9;
         console.log(a);//undefined
         console.log(b);//9
        a = '123';
       }
       f1();

    代码结果:

     练习4:

        f1();
        console.log(c);
        console.log(b);
        console.log(a);
        function f1() {
          var a = b = c = 9;
          console.log(a);
          console.log(b);
          console.log(c);
        }

    预解析下的代码解读:

    recap:

    隐式全局变量: 声明的变量没有var,  就叫隐式全局变量

    局部变量: 在函数内部定义的变量,是局部变量, 外面不能使用

       function f1() {
         var a;//局部变量
         a=9;
         //隐式全局变量
         b=9;
         c=9;
         console.log(a);//9
         console.log(b);//9
         console.log(c);//9
       }
       f1();
       console.log(c);//  9
       console.log(b);// 9
       console.log(a);//报错

    代码结果:

     练习4:

        f1();//-----报错
        var f1 = function () {
          console.log(a);
          var a = 10;
        };

    预解析下的代码解读:

        var f1;
        f1();//-----报错,不能调用,因为下的f1是赋值的表达式
        f1 = function () {
          console.log(a); //f1报错,这里就没有结果啦
          var a = 10;
        };
  • 相关阅读:
    第二次作业
    初学JAVA的 感想 尹鑫磊
    初学JAVA 感想
    《将博客搬至CSDN》
    JAVA中的几种内部类
    JAVA-静态变量与实体变量
    teacher页面的代码
    测试说明书的概述和摘要
    网站的概述
    html与xhtml的区别
  • 原文地址:https://www.cnblogs.com/jane-panyiyun/p/11957297.html
Copyright © 2011-2022 走看看