变量声明(let, const)
- let
1.特点:
(1)let声明的变量具有块级作用域(只在所处的块级内有效)
代码块
if (true) {
let a = 10;
var b = 20;
}
console.log(b);
console.log(a);
结果
(2)不存在变量提升
代码块
console.log(a);
let a = 20;
结果
(3)具有暂时性死区的特性
代码块
var num = 20;
if (true) {
console.log(num);
let num = 50;
}
结果
2.优点
(1)在业务逻辑比较复杂的时候,能够防止内层变量覆盖外层变量
(2)防止循环变量变成全局变量
eg:
循环变量变成全局变量
for (var i = 0; i < 3; i++) {}
console.log(i);
使用let变量声明
for (let i = 0; i < 3; i++) {}
console.log(i);
对于特点(2)变量提升浅谈一下
1.javascript代码执行分为:预解析,代码执行(按照代码书写顺序从上往下执行)
2.预解析分为:变量提升,函数提升
3.变量提升就是把所有的变量声明提升到当前作用域的最前面,不提升赋值操作
变量提升栗子:
console.log(a);
var a = 30;
// 预解析后---------(分界线)
//var a;
//console.log(a);
//a = 30;
- const
作用:声明常量,常量就是指(内存地址),不能变的量
1.特点
(1)具有块级作用域(同上略)
(2)声明常量时必须赋值
代码块
//const声明常量时必须赋值
const P;
结果
(3)常量赋值后,值不能修改
+对于基本数据类型来讲,一旦赋值,值不可更改(数值or字符串)
+对于复杂数据类型来讲,不能重新赋值(内存地址不可改变),但是可以更改数据结构内部的值(数组or对象)
eg:
基本数据类型
//常量赋值后,值不能修改
const p = 10;
p = 100;
复杂数据类型
const arr = [1, 2];
arr[0] = 'a';
arr[1] = 'b';
console.log(arr);
综上对var let const 三种变量声明做个总结
哈哈哈(懒~~)
OVER 加油各位