前言
回想初学javascript时,也不知道es6 、es7 等等标准,变量声明皆为var来声明,如果写一个几百行的js文件则可能就会出现声明了同一个变量冲突的情况,往往丈二和尚摸不着头脑,为啥这个变量是这个值。所以新的标准推荐使用 const和let进行变量声明会规范许多,避免一些个莫名的重名变量覆盖值的情况。
var的作用域
if (true) {
var test = true; // 使用 "var" 而不是 "let"
}
alert(test); // true,变量在 if 结束后仍存在
运行后你就能看出来,test应该是在if代码块中的,出了if不应该能够再获取到test的值,test应该是没有被声明的,但var使得它变成了全局作用域的变量,这样就会出现一些个你在其他地方声明的变量被更改值的情况,而let声明的变量就只在if当中可以访问,也就是块级作用域,更为规范以及不反人类。
let 作用域示例
if (true) {
let test = true; // 使用 "let"
}
alert(test); // Error: test is not defined
const 与之相似但不能被更改
结论
var 与 let/const 有两个主要的区别:
- var 声明的变量没有块级作用域,它们的最小作用域就是函数级作用域。
- var 变量声明在函数开头就会被处理(脚本启动对应全局变量)。
网友评论