一、声明的变量只在声明时的代码块中有效
//使用var来定义变量
for(var i = 0; i < 10; i++) {
i++
}
console.log(i) //10
//使用let来定义变量
for(let i = 0; i < 10; i++) {
i++
}
console.log(i) //i is not defined
上面两段代码,通过var定义就可以正常打印出,通过let定义就无法正常打印。原因是:通过let定义的变量存在局部作用域,也就是对于for循环存在局部作用域,此时在外部是无法访问i的,但是通过var定义的变量不存在局部作用域。所以是可以在外部访问的。
二、不存在声明提升
console.log(coder) //undefined
var coder = 'dmc'
console.log(coder) //Cannot access 'coder' before initialization
let coder = 'dmc'
如上所示我们通过var
定义的变量在未定义前值可以访问的,只是访问的值为undefined
,我们通过let
定义的变量在未定义前是不可以进行访问的。原因:我们在进行执行js代码时,会先进行解析,当遇到通过var来定义的变量,解析器会先将该变量放到window对象上,并且将其值赋值为undefined,所以也就是我们所说的变量提升。对于let/const就不会将其放到window对象上,解析依然会解析,但是不放到window对象上,也就在其上面访问是就会报错。
三、存在暂时性死区,如果在变量声明前访问,就会报错这个也就和第二点一样
四、不允许重复声明,重复声明就会报错
var names = 'dmc'
var names = 'dl'
console.log(names) //dl
五、const定义的是常量,必须给其赋初始值
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_47450807/article/details/123392865
内容来源于网络,如有侵权,请联系作者删除!