• js变量的重复声明问题总结


    首先说明一下js声明变量的三种方式:var,let,const
    let,const的声明范围是块级作用域,var的声明范围是函数作用域。
    体会以下代码:

    if(true){
                var a=1;
                let b=2;
            }
            console.log(a);//1
            console.log(b);//报错,Uncaught ReferenceError: b is not defined
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    let声明的作用域被限制在块级作用域if{}中。

    const和let用法性质基本相同,唯一区别,const声明时必须赋值,且后续不能再改变值。

    		const a=1;
            console.log(a);
            a=2;//报错:Uncaught TypeError: Assignment to constant variable.
            console.log(a);
    
    • 1
    • 2
    • 3
    • 4

    const、let和var的区别在于:const、let有块级作用域、不存在变量提升、不属于window的对象、同一作用域内不能重复声明。

    1、var重复声明var

    (1)var重复声明一个已经var声明的变量是合法的。
    (2)var重复声明并赋值一个变量,只是担当一个重新赋值的角色。
    (3)如果重复声明但不赋值一个变量,该语句不会对该变量有任何影响。

    var a = 100;
    function fn() {
    	alert(a); //undefined 变量提升
    	var a = 200;
    	alert(a); //200
    }
    fn();
    alert(a); //100
    var a;	//情况3
    alert(a); //100
    var a = 300;	//情况2
    alert(a); //300
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2、let重复声明let变量

    同一作用域内,let重复声明let变量时不合法的。

    if(true){//不合法
                let c=1;
                let c=2;
            }
    
    • 1
    • 2
    • 3
    • 4

    3、const重复声明const变量

    同一作用域内,const重复声明const变量时不合法的。

    if(true){//不合法
                const c=1;
                const c=2;
            }
    
    • 1
    • 2
    • 3
    • 4

    4、let重复声明var变量

    同一作用域内,let重复声明var变量不合法。

    if(true){
                var c=2;
                let c=1;
                console.log(c);//报错:Uncaught SyntaxError: Identifier 'c' has already been declared
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    5、const重复声明var变量

    同一作用域内,const重复声明var变量不合法。

    if(true){
                var c=2;
                const c=1;
                console.log(c);//报错:Uncaught SyntaxError: Identifier 'c' has already been declared
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    6、let重复声明const变量

    同一作用域内,let重复声明const变量不合法。

    if(true){
                const c=2;
                let c=1;
                console.log(c);//报错:Uncaught SyntaxError: Identifier 'c' has already been declared
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    7、cosnt重复声明let变量

    同一作用域内,const重复声明let变量不合法。

    if(true){
                let c=2;
                const c=1;
                console.log(c);//报错:Uncaught SyntaxError: Identifier 'c' has already been declared
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    8、var重复声明let变量

    同一作用域内,var重复声明let变量不合法。

    if(true){
                let c=1;
                var c=2;
                console.log(c);//报错:Uncaught SyntaxError: Identifier 'c' has already been declared
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    9、var重复声明const变量

    同一作用域内,var重复声明const变量不合法。

    if(true){
                const c=1;
                var c=2;
                console.log(c);//报错:Uncaught SyntaxError: Identifier 'c' has already been declared
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    CoDeSys系列-1、CoDeSys了解及资料收集
    发布 AI 后,苹果股价创历史新高
    专家呼吁:家长应承担起数字时代家庭教育新责任
    zlMediaKit 1 task模块--怎么用异步做到同步,怎么基于任务而非基于线程管理
    计算机毕业设计选题推荐-船舶维保管理系统-Java项目实战
    【面试普通人VS高手系列】讲一下wait和notify这个为什么要在synchronized代码块中?
    Python多线程(01):进程和线程的区别与使用
    【第0天】SQL快速入门-安装MYSQL环境(SQL 小虚竹)
    考了PMP和软考有什么优势?
    高性能队列Disruptor使用教程
  • 原文地址:https://blog.csdn.net/EmilyHoward/article/details/127874706