在JavaScript中有三种定义变量的方式,分别为 var let和const,他们之间有什么区别呢,跟着我一起学习吧!
var
使用var声明的变量有变量提升,不会报错,会输出undefined
可以重复定义同一个变量
可以跨块访问
不能跨函数访问
可以不用有初始值,不会报错,会输出undefined
// 使用var声明的变量有变量提升,不会报错,会输出undefined
console.log(a)// undefinedvar a =1
console.log(a)// 1// 可以重复定义同一个变量var a =1var a =2
console.log(a)// 2// 可以跨块访问{var a =1let b =2const c =3
console.log(a)// 1
console.log(b)// 2
console.log(c)// 3}
console.log(a)// 1
console.log(b)// b is not defined
console.log(c)// c is not defined// 不能跨函数访问functionaa(){var a =1}
console.log(a)// a is not defined// 可以不用有初始值,不会报错,会输出undefinedvar a
console.log(a)// undefined
let
没有变量提升
不能重复定义同一个变量
不能跨块访问
不能跨函数访问
可以不用有初始值,不会报错,会输出undefined
// 没有变量提升
console.log(a)// 'a' before initialization atlet a =1
console.log(a)// 1// 不能重复定义同一个变量let a =1let a =2
console.log(a)// Identifier 'a' has already been declared// 不能跨块访问{var a =1let b =2const c =3
console.log(a)// 1
console.log(b)// 2
console.log(c)// 3}
console.log(a)// 1
console.log(b)// b is not defined
console.log(c)// c is not defined// 不能跨函数访问functionaa(){let a =1}
console.log(a)// a is not defined// 可以不用有初始值,不会报错,会输出undefinedlet a
console.log(a)// undefined
const
没有变量提升
不能重复定义同一个常量
有块级作用域
定义的常量必须要赋值,有初始值
虽说是常量,一旦定义不能改变.但是也不是绝对的,可以通过数组和对象来改变里面值
// 不能重复定义同一个常量const a =1const a =2
console.log(a)// Identifier 'a' has already been declared// 有块级作用域{const a =1
console.log(a)// 1}// console.log(a) // a is not defined// 定义的常量必须要赋值,有初始值const a
const b =1
console.log(a)// Missing initializer in const declaration
console.log(b)// 1// 虽说是常量,一旦定义不能改变.但是也不是绝对的,可以通过数组和对象来改变里面值// 一般常量const a =10
a =20
console.log(a)// 无法改变 Assignment to constant variable.// 数组形式 unshift shift pop pushconst a =[1,2,3,4,5]// [1,2,3,4,5]
a.push(6)
console.log(a)// [1, 2, 3, 4, 5, 6]// 对象形式const a ={name:'李四',age:18}
a.name ="王五"
console.log(a)// {name: "王五", age: 18}