es6中的let和var、const的区别

通过var定义的变量,作用域是整个封闭函数,是全域的 。通过let定义的变量,作用域是在块级或是子块中。

 <script>
        console.log(fun); //undefined
        var fun=2; 
        console.log(fun); //2
        var fun=45; //不会报错
        let fun=46;//会报错
    </script>

变量提升现象: 浏览器在运行代码之前会进行预解析,首先解析函数声明,定义变量,解析完之后再对函数、变量进行运行、赋值等。
-不论var声明的变量处于当前作用域的第几行,都会提升到作用域的头部。
-var 声明的变量会被提升到作用域的顶部并初始化为undefined,而let声明的变量在作用域的顶部未被初始化

<script>
        for (var i = 0; i < 5; i++) {
    
    
        }
        console.log(i);//5
        for (let j = 0; j <5 ; j++) {
    
    
        }
        console.log(j);//Uncaught ReferenceError: i is not defined
    </script>

let关键字
let关键字用来声明变量,使用let声明的变量有几个特点:
1)不允许重复声明
2)块儿级作用域
3)不存在变量提升
4)不影响作用域链
应用场景:以后声明变量使用let就对了

    <script>
    //声明变量
    let a;
    let b,c,d;
    let e = 100;
    let f = 521, g = 'iloveyou', h = [];

 	//变量不能重复声明
     let star = '罗志祥';
     let star = '小猪';

    // if else while for
    {
    
    
        let girl = '周扬青';//girl is not defined
    }
    console.log(girl);
	//不存在变量提升
    console.log(song);// Cannot access 'song' before initialization
    let song = '恋爱达人';

	//不影响作用域链
    {
    
    
        let school = '尚硅谷';
        function fn(){
    
    
            console.log(school);
        }
        fn();
    }

    </script>

2.2.const 关键字
const关键字用来声明常量,const声明有以下特点
1)声明必须赋初始值
2)标识符一般为大写
3)不允许重复声明
4)值不允许修改
5)块儿级作用域
注意:对象属性修改和数组元素变化不会出发const错误
应用场景:声明对象类型使用const,非对象类型声明选择let

		//声明常量
        const SCHOOL = '尚硅谷';
        //1. 一定要赋初始值
        const A;
        //2. 一般常量使用大写(潜规则)
        const a = 100;
        //3. 常量的值不能修改
        SCHOOL = 'ATGUIGU';
        //4. 块儿级作用域
        {
    
    
             const PLAYER = 'UZI';
        }
        console.log(PLAYER);//PLAYER is not defined
        //5. 对于数组和对象的元素修改, 不算做对常量的修改, 不会报错
        const TEAM = ['UZI','MXLG','Ming','Letme'];
        TEAM.push('Meiko');

猜你喜欢

转载自blog.csdn.net/qq_45731083/article/details/108582014