var和let、const 不同

原始js的var来进行变量的定义,ES6出台后,变量的定义方式 发生了变化,出现 let const 存在块级作用域 {作用域空间},let定义的变量只在对应的作用域中生效

 var x=20 //两个作用域:全局 局部:函数内部才叫局部
        var lis=document.getElementsByTagName("li")
        for(var n=0;n<lis.length;n++){ //全局中的n=4
            lis[n].onclick=function(){
                console.log(n)//4 
            }
        }

//而使用let则会出现点谁出现谁的下标
 var lis=document.getElementsByTagName("li")
        for(let n=0;n<lis.length;n++){ 
            lis[n].onclick=function(){
                console.log(n)
            }
        }

第一个不同:let与const新增了块级作用域

if(true){
            var x=20
        }
        console.log(x)//20



 if(true){
            let x=20
        }
        console.log(x)//x is not defined

第二个不同:var定义变量,存在变量的默认提升功能,let与const 不存在变量的提升问题

 console.log(x)//Cannot access 'x' before initialization未初始化x
        let x=20
 console.log(x)//undefined
        var x=20

var定义的会出现声明被提前到作用域顶部,赋值保留在原地,而let定义的直接会出现未定义x

第三个不同:var 可以重复定义 ,let与const不允许重复定义

 let x=20
        let x=30
        console.log(x)//Identifier 'x' has already been declared 已经被初始化
 var x=20
        var x=30
        console.log(x)//30

var可以重复定义,前面的值会被后面定义的值所覆盖,而let重复定义直接报错,这样更严谨防止写代码是出现值的覆盖

第四个不同:var定义的变量默认挂载到window对象上,let和const不会

 var x=20
        console.log(window.x)//20

  let x=20
        console.log(window.x)//undefined

第五个不同:let和const存在暂时性死区问题 

  let a=20
        if(true){
            a=40
            console.log(a)//Cannot access 'a' before initialization
            let a=30
        }


let a=20
        if(true){
            a=40
            console.log(a)//40
        }

只要在作用域中使用let定义了变量,就必须在定义后使用 ,哪怕全局有,也不能使用,想要输出a无需再定义

const 与let区别 :const是定义常量的,let是定义变量

 const y=30
        y=40
		console.log(y)//Assignment to constant variable.常量无法再赋值

        let x=20
        x=30
        console.log(x)//30

const定义的是个常量只能赋值一次,而let定义的可以重复赋值

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值