zoukankan      html  css  js  c++  java
  • 变量名提升

    1. 预解析的过程
    2. 代码的执行过程 程序在执行过程,会先将代码读取到内存中检查,会将所有的声明在此时进行标记。所谓的标记就是让js解释器直到有这个名字,后面在使用名字的时候,不会出现未定义的错误,这个标记就是提升 声明:
    3. 名字的声明,标识符的声明(变量名的提升)
      • 名字的声明就是让我的解释器知道有这个名字
      • 名字没有任何数据与之对应
    4. 函数的声明
      • 函数声明包含两部分
        • 首先告诉解释器函数的名字
        • 告诉解释器 这个名字对应的函数体是什么
      • 函数声明与函数表达式有区别,函数声明是单独写在一个结构中,不存在任何语句,逻辑判断等结构中 ``` 函数声明: function(){} function f(){}
    ```
     函数表达式:
        var f=function(){};
        this.sayHello=function(){};
        if(true){
            function f(){}
        }
    

    代码分析:

    案例1:

        var num=1;
        function num(){
            alert(num);
        }
        num();
    
    1. 预解析过程
      • 提升声明 变量num
      • 再提升函数 num在内存中已经存在,因此直接绑定对应的函数体
      • 内存中有一个函数num
    2. 执行代码
      • 给num赋值为1,覆盖函数
    3. 调用num 由于num中存储的是数字1 因此报错

    案例2:

        var num=123;
        function foo1(){
            console.log(num);
            var num=456;
            console.log(num);
        }
        foo1();
    

    代码分析:

    1. 预解析过程
      • 提升变量名num和函数foo1
    2. 执行代码
      • 给num赋值为123
      • 调用函数
        • 进入函数的瞬间预解析,提升变量名num
        • 在函数内部是一个独立的空间,允许使用外部的变量即num覆盖外面的num
        • 执行第一句 输出为Undefined
        • 执行第二句 给num赋值为456
        • 执行第三句 输出为456

    案例3:

        if(true){
            function f1(){
                console.log('true');
            }
        }else{
            function f1(){
               console.log('false');
            }
        }
        f1();
    

    代码分析:

    1. 预解析过程
      • 函数在判断语句中为表达式所以不提升
    2. 执行代码
      • 执行if语句,条件成立,输出true
      • 但是一些老版本在执行过程中,会把If语句中的函数表达式当成函数声明来解析, 并提升函数输出为false*
  • 相关阅读:
    收藏的博客
    MVC 之 System.Web.Optimization找不到引用
    SQL Server 之 附加数据库出现“ 拒绝访问 ”
    Android Studio 之 环境搭建
    PD 之 连接数据库并导出数据及生成PDM文件
    Windows 之 可以Ping通服务器但无法使用服务器连接的共享打印机
    JQuery 之 在数据加载完成后才自动执行函数
    JavaScript 之 动态加载JS代码或JS文件
    JQuery 之 动态加载JS或JS文件
    JavaScript 之 解码类似eval(function(p,a,c,k,e,d){}))的JavaScript代码
  • 原文地址:https://www.cnblogs.com/ghlucky/p/5742986.html
Copyright © 2011-2022 走看看