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

    var:变量提升(无论声明在何处,都会被提至其所在作用域的顶部)
    let:无变量提升(所在的块内,未到let声明时(即let声明之前),是无法访问该变量的(not defined)),let变量不能重复声明(报错has already been declared)
    const:无变量提升,声明一个基本类型的时候为常量,不可修改;声明对象可以修改
    <script>
        var a = 1;
        function fn() {
            console.log(a)//undefined
            a = 2;
            console.log(a)//2
            var a = 3;
            console.log(a)//3
        }
        /* var声明变量提升到作用域顶部
        fn等价于 
        function fn() {
            var a;
            console.log(a)//undefined
            a = 2;
            console.log(a)
            a = 3;
            console.log(a)
        }
        */
    
        function fn2() {
            //console.log(a)//a is not defined,let声明之前不能使用
            let a = 4;
            //let a = 5;//a has already been declared,在同一个作用域内let不能重复声明如果{let a=5;}就可以,{}内的let声明作用域只在{}有效
            console.log(a)//4
        }
    
        function fn3() {
            console.log(a)//1
            a = 6;
        }
    
        fn();
        fn2();
        fn3();
        console.log(a);//6
    </script>

     还有以下例子,可以看出函数也存在提升一说:

    <script>
        console.log(fn);//ƒ fn() {}
        var fn = 1;
    
        function fn() {}
    
        console.log(fn);//1
    
        /*函数提升,提升到作用域最前
        等价于
        var fn = undefined;
    
        function fn() {}
    
        console.log(fn);
        fn = 1;
        console.log(fn);
        */
    </script>

     具体的提升可以参照:https://zhuanlan.zhihu.com/p/28140450

  • 相关阅读:
    PYTOHN1.day14
    PYTHON1.day13
    PYTHON1.day12
    PYTHON1.day11(n)
    PYTHON1.day10
    PYTHON1.day09
    PYTHON1.day08
    同步代码块 synchronized
    守护线程
    休眠线程
  • 原文地址:https://www.cnblogs.com/lcawen/p/8777630.html
Copyright © 2011-2022 走看看