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);
    };
  • 相关阅读:
    个人作业-数组3
    Java编程思想
    19年春第三周学习
    个人作业-数组2
    自我介绍
    个人作业-数组
    19春第二周学习心得
    fiddler--华为手机下载安装fiddler证书
    RF接口测试----post请求
    RF接口测试----get请求
  • 原文地址:https://www.cnblogs.com/echo-hui/p/9230942.html
Copyright © 2011-2022 走看看