let var const区别

 1.是否存在变量提升?

var声明的变量存在变量提升 

var声明的变量存在变量提升,它会将声明的变量提升到当前作用域的最顶端,使得变量在声明之前可以使用,返回一个undefined。

console.log(a);//undefined
var a = 1;

let/const声明的变量不存在


console.log(b)  //ReferenceError: Cannot access 'b' before initializationat 
let b=2
console.log(c)  //ReferenceError: Cannot access 'c' before initializationat 
const c=3

initializationat //初始化
let||const 不能在初始化之前使用不然就报错

这两个方法声明的变量要在声明后使用,否则就会报错!

 2.是否存在暂时性死区?

let/const声明的变量存在

        var a = 1
        {
            console.log(a);
            let a = 2
            console.log(a);

        }
        console.log(a);

只要块级作用域内 存在let命令,它所声明的变量就会“绑定”这个区域,不在受外部的影响。

如果块级作用域存在let和const,并且用let和const声明一个变量之前,都不能使用这个变量,否则就会报错,在这之前的代码块,对于这个变量来说都叫暂时性死区。

 3.是否允许重复声明变量?

 var声明的变量可以重复声明

        var a = 1;
        console.log(a);//1
        a = 2;
        console.log(a);//2

 let/const声明的变量不可以重复声明

        let b = 1;
        console.log(b);//1
        let b = 100
        console.log(b);//Identifier 'b' has already been declared
        const c = 1;
        console.log(c);//1
        const c = 100; //Identifier 'c' has already been declared  
        console.log(c);
        Identifier 'XXX' has already been declared————标识符b已经被声明了

 4.是否存在块级作用域?

块作用域由 { } 包括,if语句和for语句里面的{ }也属于块作用域。同时,函数声明还会提升到所在的块级作用域的头部。


        {
            if (4 < 2) {
                function fn() {
                    console.log("111");
                }
            }
        }
        fn()//fn is not a function
        {
            let a = "呵呵"
            let fn = function () {
                console.log("呵呵");
            }
            console.log(a, fn); // 呵呵 ƒ () {console.log("呵呵");}
        }

注意:ES6中允许函数在块级作用域中可以声明的条件是必须在大括号里面,否则就会报错。

        if (4 > 2) {
            let fn = function () { }
        }

        if (4 > 2)
            let fn = function () { }
            // Uncaught SyntaxError: Lexical declaration cannot appear in a single-statement context

 5.是否能修改声明的变量?

const声明的变量不可修改----let和var声明的变量可以修改

因为const声明的是一个常量,一旦声明常量的值就不能被改变。const一旦声明变量,就必须立即初始化,不能留到以后再赋值

  var a=1;
 	a=2;
console.log(a)//2

let b=3;
	b=4;
console.log(b)//4

const c=5;
	  c=6;
console.log(c)//报错 不能进行重复声明   TypeError: Assignment to constant variable

      const c = {
            n: 1
        };
        c.n = 100
        console.log(c.n);///100
const声明的变量 如果赋值为一个引用数据类型的值,那么是可以修改值里面的内容的,
只要不去修改这个变量所指向的内存空间地址即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值