var,let,const之间的区别

var 是ES5的声明变量语法,let 与 const 是ES6才出现的声明变量语法


var

var 拥有函数作用域,在函数外是全局的,在函数内是局部的

var a = 10
function demo(){
  var a = 20
  console.log(a) // 20  
}
demo()
console.log(a) // 10

var 拥有声明头的提升

console.log(a) // undefined
var a = 10

----------------------------------
// 会被编译成
var a
console.log(a)
a = 10

var 可重复声明,后面的会将前面的给覆盖

var a = 10
var a = 20
console.log(a) // 20

 

let 

let 是块级作用域,但是所声明的变量,只在let命令所在的代码块内有效

{ let a = 10 }
console.log(a) // ReferenceError: a is not defined
------------------------------------------------------
let a = 10
function demo(){
  let a = 20
  console.log(a) // 20
}
demo()
console.log(a) // 10

let 没有声明头的提升

console.log(a) // ReferenceError: Cannot access 'a' before initialization
let a = 10

let 不能够重复声明

let a = 10
let a = 20
console.log(a) // SyntaxError: Identifier 'a' has already been declared

 

const

const 基本上和 let 一样   是一个块级作用域,没有声明头的提升,不能够重复声明

但是 const 定义的是一个常量,使用了 const 进行定义的变量不能够进行修改

const a = 10
a = 20
console.log(a) // TypeError: Assignment to constant variable.

 

var 和 let 的应用

var 现在比较少用了,一般改用 let ,因为 var 没有块级作用域

如:

var a = 1
for(var a = 5 ; a <= 10 ; a++){
  // console.log(a)
}
console.log(a) // 11 因为什么块级作用域,所以在上面命名的变量会与进行for循环中的变量重叠

但是在 let 中就没有这种情况了

let a = 1
for(let a = 5 ; a <= 10 ; a++){
    // console.log(a)
}
console.log(a) // 1 let 是块级作用域,其在 for 定义的变量不会影响外部所定义的变量

 

参考资料 https://blog.csdn.net/weixin_44475093/article/details/112504907

posted @ 2021-08-31 09:35  感觉678  阅读(186)  评论(0编辑  收藏  举报