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

  • 相关阅读:
    ios 数据类型转换 UIImage转换为NSData NSData转换为NSString
    iOS UI 12 block传值
    iOS UI 11 单例
    iOS UI 08 uitableview 自定义cell
    iOS UI 07 uitableviewi3
    iOS UI 07 uitableviewi2
    iOS UI 07 uitableview
    iOS UI 05 传值
    iOS UI 04 轨道和动画
    iOS UI 03 事件和手势
  • 原文地址:https://www.cnblogs.com/lcawen/p/8777630.html
Copyright © 2011-2022 走看看