你真的了解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');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值