一.var的使用
var具有函数作用域的特点,如果在外面定义的变量属于window
二.le的使用
1.在一个花括号中{},使用let关键字声明的变量才具有块级作用域的特点
2.拥有块级作用域的特点,防止循环变量成为全局的变量
3.例子(证明let具有块级作用域)
if (true) {
var num = 100
let num1 = 100
}
console.log(num);
console.log(num1);
解析:在花括号里面声明了两个变量num,和num1,然后分别将两个变量进行打印,现在我们一起来看一下执行的结果:
可以看出打印出了100,而用let定于的num1未定义,证明了let具有:块级作用域的特点。
4.使用let关键子声明的变量不存在变量提升
例子:
console.log(a);
var a = 10;
解析:打印出来的结果是,因为var存在变量提升, 原来的式子会变成:
var a
console.log(a);
a=10
使用var的使用得到了提升;打印出来的结果是undefined(提升的是变量,并不是赋值)
例子:
console.log(a);
let a = 10
报错:在初始化之前不能进行访问
所以:使用let,不存在变量提升的问题
5.使用let声明的变量具有暂时性死区的特点
代码:
var a = 10
if (true) {
console.log(a);
let a = 20
}
解析: 在函数的外面定义了一个全局的变量a,在{}里面又定义了一个 局部的变量a,具有块级作用域的特点,在局部已经使用了a 因此在外面定义的全局不能在被定义,否则会报错;
三.const关键字的特点
1.特点,声明常量,常量就是值(内存地址)不能变化的量
代码1:
const a = 10;
a = 11;
console.log(a);
代码2:
const ary = [100, 200];
ary[0] = 123;
console.log(ary);
图解:
代码3:
const ary = [100, 200];
ary = [1, 2]
console.log(ary)
图解:
2.使用cosnt声明的变量具有块级作用域的特点
3.使用cosnt关键字声明的常量必须赋初始值
四: let const var 的区别
1.使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象。
2.使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升
3.使用const 声明的常量,在后面出现的代码中 不能在修改该常量的值
图解: