zoukankan      html  css  js  c++  java
  • var的变量提升的底层原理是什么?

    原理:JS引擎的工作方式是①先解析代码,获取所有被声明的变量;②然后在运行。也就是专业来说是分为预处理和执行两个阶段。

    变量提升的定义:所有变量的声明语句都会被提升到代码头部,这就是变量提升。

    例如:

    console.log(a);
    var a =1;

    以上语句并不会报错,只是提示undefined。实际在js引擎中的运行过程是:

    var a;
    console.log(a);
    a =1;

    实际运行表示变量a已声明,但还未赋值。

    但是变量提升只对var命令声明的变量有效,如果一个变量不是用var命令声明的,就不会发生变量提升。

    console.log(aa);
    aa =1;

    以上代码将会报错:ReferenceError: aa is not defined

    补充:js里的function也可看做变量,也存在变量提升情况

    a();
    
    function a(){
        console.log(1);
    };

    表面上,上面代码好像在声明之前就调用了函数a。但是实际在js引擎中,由于“变量提升”,函数a定义部分被提升到了代码头部,也就是在调用之前已经声明了。

    但是!如果采用赋值语句定义函数,JavaScript就会报错:

    a();
    
    var a = function(){
        console.log(1);
    };
    
    // TypeError: a is not a function

    因为js引擎把变量声明提升,此时,a就是一个变量,而并不是一个function,以下是js引擎实际运行代码:

    var a;
    a();
    
    a = function(){
        console.log(1);
    };
  • 相关阅读:
    关于配置文件权衡,.config VS .xml
    Google不支持小于12px字体 终极办法
    两个表循环的复杂度分析 征集
    SQL 计算列
    5分钟上手写ECharts的第一个图表
    NGif, Animated GIF Encoder for .NET
    Chart系列(一):Chart的基本元素
    一张广告图片引起的思维DFS
    洛谷 P2580 于是他错误的点名开始了
    洛谷 P1496 火烧赤壁
  • 原文地址:https://www.cnblogs.com/echo-hui/p/9230942.html
Copyright © 2011-2022 走看看