let和const的注意点

x33g5p2x  于2022-03-10 转载在 其他  
字(0.7k)|赞(0)|评价(0)|浏览(226)

一、声明的变量只在声明时的代码块中有效

//使用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定义的是常量,必须给其赋初始值

相关文章