var 变量提升分析

作者: 青山旁小溪边 | 来源:发表于2019-11-07 10:12 被阅读0次

    原理

    JS的工作方式

    1. 先解析代码,获取到所有被声明的变量。
    2. 然后再运行。

    换成专业术语就是预处理阶段和执行阶段。
    什么是变量提升,它的定义是什么?
    变量提升:所有变量的声明语句都会被提升到代码头部。
    例子:

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

    在控制台执行以上代码并不会报错误,它会打印undefined,其实在js中运行过程是:

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

    运行过程中变量a已经声明,但未被赋值。
    变量提升只适用于用var声明的变量

    console.log(a);
    a = 100;
    

    这种情况,js就会抛出异常:Uncaught ReferenceError: a is not defined

    function函数也是变量,所以它也存在变量提升
    例子:

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

    由于变量提升的原因,打印结果:1
    但是如果是赋值语句定义函数,js就会报错:

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

    js抛出异常:Uncaught ReferenceError: a is not defined
    why?
    js运行过程中,它把声明的a变量提升了,运行代码其实是这样的:

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

    最后的总结

    • 所有的声明都会提升到作用域的最顶上去。
    • 同一个变量只会声明一次,其他的会被忽略掉或者覆盖掉。
    • 函数声明的优先级高于变量申明的优先级,并且函数声明和函数定义的部分一起被提升。

    相关文章

      网友评论

        本文标题:var 变量提升分析

        本文链接:https://www.haomeiwen.com/subject/jnembctx.html