描述
var,const,let都可以的声明变量,
例如
var a = 1;
const b = 1;
let c = 1;
一.var的特点
1.存在变量提升
console.log(a);//undefined
var a = 10;
var a;
console.log(a);//unfined
a = 10;
console.log(a);//10
2.一个变量可以多次声明,后买的声明会覆盖前面的声明
var a = 10;
var a = 20;
console.log(a);//20
3.在函数种使用var,是局部的
var a = 10;
function change(){
var a =20;
return a;
}
condole.log(a);//10
console.log(change());//20;
4.如果var声明变量不在函数内部,则该变量是全局的
var a = 10;
function change(){
a = 20;
}
change();
console.log(a);//20;
二.let的特点
1.不存在变量提升,let在声明前,该变量不能使用(暂时性死区).
console.log(a);//因为a后面使用let声明的,这里会报一个错误
let a = 10;
2.let可以声明变量,在块级作用域内有效
{
let a = 10;
}
console.log(a);//块级作用域,这里会报错,a is not defined
3.let不允许在同一作用域中重复声明,
let a = 10;
let a = 20;
//报错
三.const
let有的const都有,在let基础上还有以下特点:
1.const可以声明只读的变量,声明后,值不能被改变
const a = 10;
a = 20; //Assignment to constant variable
2.const声明的变量并不是值不能改变,而是变量指向的内存地址不能改动,如果使用const声明一个对象的话,对象内属性可以发生改变
const cat = {
name:'Tom',
age:3
}
cat.age = 4; //可以改变对象内属性
cat={
name:'Garfield',
age = 4
}//'cat' has already been declared
3.const必须初始化
const a;//SyntaxError: Missing initializer in const declaration
const a=10;
区别
1.变量提升
var声明的变量存在变量提升,变量可以在声明之前是使用,值为undefined
let和const声明的变量,必须先声明后使用,如果在声明前使用会报错
2.作用域
let和const存在块级作用域
而var不存在块级作用域
3.重复声明
var允许重复声明变量
let与const不允许在同一作用域下重复声明变量
4.修改声明的变量
var 和 let都可以修改声明的变量
const声明一个常量,常量值不能发生改变,如果声明的是一个对象,可以修改对象里的属性,而对象本身不能被修改,也就是内存地址不能被修改