var、const、let的区别

var、const、let的区别

1、作用域
var是函数作用域,let和const是块级作用域
在函数内部省略var操作符时,会创建一个全局变量。
函数作用域:在函数退出时,变量会被销毁。
块级作用域:块作用域由 { } 包括,if语句和 for语句里面的{ }也属于块作用域。
if语句中的let

if(typeof name===undefined){
    let name='白雪公主'
}
console.log(name) // ReferenceError: name is not defined
if(typeof name===undefined){
    let name
}
name='白雪公主' // 相当于使用var全局定义了一个变量
console.log(window.name)// 白雪公主
console.log(name) // 白雪公主```

for循环中的let

for (var i = 0; i < 5; ++i) {
    setTimeout(() => console.log(i), 0)//最后输出5个5
}
console.log(i)//先输出i,5
console.log(111)//再输出111
//执行顺序是先跳出for循环,再执行setTimeout中的语句,在跳出for循环时i的值为5,所以最后执行setTimeout时i一直都是等于5
for (let i = 0; i < 5; ++i) {
    setTimeout(() => console.log(i), 0)//最后输出1、2、3、4、5
}
console.log(111)//先跳出for循环,输出111
//使用 let 声明迭代变量时,JavaScript 引擎在后台会为每个迭代循环声明一个新的迭代变量,每个 setTimeout 引用的都是不同的变量实例

2、变量提升
var存在变量提升(提升变量的定义,不提升变量赋值),let和const不存在变量提升
3、let 和const不允许同一个块作用域中出现冗余声明
4、使用 let和const 在全局作用域中声明的变量不会成为 window 对象的属性(var 声明的变量则会)。
5、声明const变量时必须初始化,如果定义的是基本数据类型时,他的值是不允许修改的,如果是引用数据类型,是可以修改他的值的,且只能修改他的值

const a='我不可以被修改哦'
a = '我试试' //  报错Assignment to constant variable
console.log(a)
const a={
    name:'白雪公主',
    age:'16'
}
a.name='七个小矮人'
console.log(a.name)//七个小矮人
a.hight='100cm'
console.log(a.height) //undefined
const a={
    aa:{
        name:'小明',
        age:18
    },
    bb:{
        name:'小红',
        age:17
    }
}
a.aa.height='175'//aa对于对象a来说是a的属性,所以可以修改给对象aa新增属性
console.log(a.aa.height) //175

let、const、var使用原则:
在变量不会变时,使用const;未来会有修改时使用let

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值