js中const,var,let区别与用法

1、const定义的变量不可以修改,而且必须初始化

const b = 2;//正确
// const b;//错误,必须初始化 
console.log('函数外const定义b:' + b);//有输出值
// b = 5;
// console.log('函数外修改const定义b:' + b);//无法输出 

1、const声明的变量,只在声明所在块级作用域有效;
2、const声明的常量不会变量提升,只能在声明后使用;
3、不可重复声明;

2、var定义的变量可以修改,如果不初始化会输出undefined,不会报错

var a = 1;
// var a;//不会报错
console.log('函数外var定义a:' + a);//可以输出a=1
function change(){
a = 4;
console.log('函数内var定义a:' + a);//可以输出a=4
} 
change();
console.log('函数调用后var定义a为函数内部修改值:' + a);//可以输出a=4

3、let是块级作用域,函数内部使用let定义后,对函数外部无影响

(1)基本用法

//demo1
        // 如果将let声明的变量包含在{}之中,则该变量只在此代码块内有效
        let a = 10;
        var b = 12;
        console.log(a);   //10
        console.log(b);   //12
//demo2
        var a = [];
        for(var i=0; i<10; i++){
            // i是var声明的,全局范围内有效,所以每一次循环,i的值都会发生改变
            a[i] = function(){
                console.log(i);
            }
        }
        // 函数内部的i指向全局,所以数组中的i指向的都是最后一轮i的值
        a[6]();   //10
//demmo3
        var a = [];
        for(let i=0; i<10; i++){
            // i是let声明的,只在本轮循环内有效,每一次循环都是一个新变量
            a[i] = function(){
                console.log(i);
            }
        }
        a[6]();   //6

(2)不存在变量提升
使用let声明变量,只要变量在未声明前使用,都会报错,不会提前声明变量
(3)暂时性死区

//demo1
        var temp = 12;
        // 一个不存在的变量用typeof检查,返回的是undefined
        console.log(typeof b);  //undefined
        if(true){
            // 只要块级作用域内存在let和const声明的变量,就会在一开始形成封闭作用域,不再受外部变量干扰
            temp = "123";  //报错
            // 用typeof检查let声明的变量,会报错
            console.log(typeof temp);   //报错
            let temp;
        }
//demo2
        function demo1(a = 2 , b = a){
            return console.log(a + ',' + b);
        }
        // 将y赋值给x前,y还没有声明,属于死区
        function demo2(x = y , y = 2){
            return console.log(x + ',' + y);
        }
        demo1();
        demo2();
//demo3
        var x = x;  //不报错,x声明提升。
        // 使用let声明变量时,只要变量在未声明前使用,都会报错
        let y = y;  //报错

(4)不允许重复声明
不能在函数内部重新声明参数

//demo1
        function (){
            // 报错
            let a = 10;var a = 2;
            // 报错
            var a = 10;let a = 2;
            // 报错
            let a = 10;let a = 2;
            // 报错
            var a = 10;var a = 2;
        }
//demo2
        function fun(a,b){
            // let a;  //报错
            {
                let b;  //不报错
            }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值