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