关于let,var,const的一些总结

1.变量提升

console.log('a:',  a)
var a=3
console.log('b:', b)
let b=3

以上代码,var变量会被提升,经编译器编译之后的代码如下

var a
console.log('a:',  a)
a=3
console.log('b:', b)
let b=3

很多人说js是解释性语言,其实是编译后从上到下执行;
执行结果如下

关于let,var,const的一些总结_第1张图片
image.png

结论:var会变量提升,let不会变量提升

2.let的作用域

function Test(param){
  console.log(param)
  let a = 'outer'
  if(param == 3){
    let a = 'inner'
    console.log(a)
  }
 console.log(a)
}
Test(1)
Test(3)

以上的代码,Test作用域定义了一个a,if作用域定义了一个a,执行之后,结果如下

关于let,var,const的一些总结_第2张图片
image.png

假如代码改成如下

function Test(param){
  console.log(param)
  let a = 'outer'
  if(param == 3){
    let a = 'inner'
    console.log(a)
  }
  let a = 'reSet'
 console.log(a)
}
Test(1)

结果如下

image.png

结论:不同作用域可以重复定义变量,同一作用域不能重复定义变量

3.const注意事项

大多数情况下,let和const有相同的准则,只不过const定义的变量是不可变的,但是这是针对简单数据类型(数字,字符串和bool变量),如果是复杂类型,虽然定义了const,但是依然可以改变,

const arr1 = []
arr1.push(2)
const obj1 = {}
obj1.name = 'test'

以上代码,都能改变const变量的值
另外还有一个注意点,const的变量必须赋值,不然会报错

你可能感兴趣的:(关于let,var,const的一些总结)