欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

变量名提升

程序员文章站 2023-12-28 23:42:58
...

变量名提升

    var num = 123;
    function foo1 () {
        console.log( num );
        var num = 456;
        console.log( num );
    }
    foo1();
  1. 预解析的过程
  2. 代码的执行过程

程序在执行过程, 会先将代码读取到内存中检查. 会将所有的声明在此时进行标记. 所谓的标记就是
让 js 解释器知道有这个名字, 后面在使用名字的时候, 不会出现未定义的错误. 这个标记过程就是提升.

声明:

  1. 名字的声明, 标识符的声明( 变量名声明 )
    • 名字的声明就是让我们的解释器知道有这个名字
    • 名字没有任何数据与之对应
  2. 函数的声明
    • 函数声明包含两部分
    • 函数声明与函数表达式有区别, 函数声明是单独写在一个结构中, 不存在任何语句, 逻辑判断等结构中
     function f() {
         function func() {
         } // 声明
    
         if ( true ) {
             function func2() {} // 函数表达式
         }
         var f = function func3 () {}; // 函数表达式
    
         this.sayHello = function () {}; // 函数表达式
    
    
         var i = 1;
         function func4 () {}  // 函数声明
         var j = 2;
     }
    • 首先函数声明告诉解释器有这个名字存在. 该阶段与名字声明一样
    • 告诉解释器, 这个名字对应的函数体是什么
    var num = 1;
    function num () {
        alert( num );
    }
    num();

分析:

  1. 预解析代码, 提升名字
    • 首先提升名字 num
    • 再提升函数名, 但是名字已经存在 因此只做第二部, 让名字与函数体对应上
    • 结论就是 代码中已经有一个 函数 num 了
  2. 开始执行代码, 第一话从 赋值语句开始执行
    • 给 num 赋值为 1
    • 覆盖了函数
  3. 调用 num, 由于 num 中存储是 数字 1, 因此报错

上一篇:

下一篇: