变量声明let
作用:声明一个块级作用域的本地变量,可以设置初始值
语法:声明并设置初始值
let y = 5;
console.log(y);
注意点:
1. let不允许在相同作用域内,重复声明同一个变量
2.它的用法类似于var,但是所声明的变量,只能在let命令所在的代码块内有效
3.var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为underfined
变量声明var
作用:设置变量 ,和let类似
语法:声明变量+初始值
var noodle ='螺蛳粉'
重新赋值
noodle ='五谷鱼粉'
console.log(noodle);//五谷鱼粉
注意点:变量会提升 没有块级作用域
常量声明const
作用:const声明一个只读的常量 ,一旦声明,常量的值就不能改变
语法:声明并设置初始值
const y =10;
注意点:
1.基本类型数据无法重新赋值
2.必须设置初始值,const声明的变量不得改变值,const一旦声明变量,就必须立即初始化,不能留到以后赋值,只声明不赋值,就会报错
3.有块级作用域,const的作用域和let命令相同,只在声明的块级作用域内有效
4.不会变量提升,const命令声明的常量也是不能提升,同样存在暂时性死区,只能在声明的位置后面使用
5.不能重复声明
常量声明const2
在const中,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。
对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量
但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针
const只能保证这个指针是固定的(即总是指向另一个固定的地址)。
基本数据类型无法重新赋值。
引用类型(对象、数组...)可以更改内容 (注:不能改的是栈)
例:
const a = [];
a.push('行行行');//可执行
console.log(a);
console.log(a.length);//1
a.length = 0;//可执行
console.log(a.length); //0
a =['好好好'] //Assignment to constant variable.(分配给常量变量)
console.log(a);
常量a是一个数组,这个数组本身是可写的,但是如果将另一个数组赋值给a,就会报错