推荐使用 let 来定义变量,而逐渐放弃使用 var ,这样会使你的代码更加规范,避免出现那些你很难预料的bug
const定义的是常量,在后面的代码中就不能对 const 进行修改了,否则就会报错。
var 和 let
var 声明的变量作用于函数内,且存在变量提升
let 变量作用于块级作用域 (花括号 括起来的地方)不存在变量提升,先使用后申明会报错。
let声明的全局变量不是全局对象的属性。 这就意味着,你不可以通过window.变量名的方式访问这些变量。它们只存在于一个不可见的块的作用域中,这个块理论上是Web页面中运行的所有JS代码的外层块。但是 var 申明的变量可以
下面的代码 就是用 var 会出现的 bug:
function test() {
let a = ['11','22','33'];
for (let i = 0;i<a.length;i++){
setTimeout(function () {
console.log(a[i]); 会依次打印 11 ,22,33
},i * 1500)
}
}
test()
function test() {
let a = ['11','22','33'];
for (var i = 0;i<a.length;i++){
setTimeout(function () {
console.log(a[i]); 会报3次错,因为setTimeout还么有执行, i 就已经等于3了
},i * 1500)
}
}
test()
因为let 的作用域是在代码块中,执行3次for循环,每个for循环中的都用 let 声明了变量,所以三次都不同
const
let 拥有的,const 都有,const修改的是常量,在后面的代码中就不能对 const 进行修改了,否则就会报错。
特别是必须申明后 马上赋值
const a = 1; //正确
a = 100; //不能够修改
const a; //错误,必须申明后马上赋值
网友评论