2.1、let
let 关键字用来声明变量,使用 let 声明的变量有几个特点:
-
不允许重复声明
-
块儿级作用域
-
不存在变量提升
-
不影响作用域链
-
暂时性死区
6)不与顶级对象挂钩
应用场景:以后声明变量使用 let 就对了
javascript
<script>
//声明变量格式
let a;
let b, c, d;
let e = 100;
let f = 521,
g = "iloveyou",
h = [];
//1. 变量不能重复声明,防止变量被污染
// let star = '王老师';
// let star = '余老师'; //会报错
//2. 块儿级作用域 避免暴露成全局作用域,影响别人
{
let girl = '王老师';
var boy='张老师'
}
console.log(girl);//报错
console.log(boy);//张老师
// if else while for 这些语句里,都是有块级作用域的
//for 循环的计算器,就很合适let命令
for(let i=0;i<3;i++){
console.log(i);//0,1,2
}
console.log(i);//报错
//3. 不影响作用域链
//作用域链:内层作用域 ------> 外层作用域 ------> 全局作用域
{
let school = "bdqn";
function fn() {
console.log(school);//在fn作用域没有,还是会向上寻找
}
fn();
}
//4. 不存在变量提升
// console.log(song);
// let song = '恋爱达人';
// 5、let暂时性死区
var a = 1;
if (true) {
a = 2; // 报错,初始化前不能访问a,也就是在同一个作用域中,不可以访问,再定义
let a = 1;
}
// 6、 不与顶层对象挂钩
var myname='zhangsan'
let myage=18
console.log(window.myname);//zhangsan
console.log(window.myage);//undefined
</script>
2.2、const
const 关键字用来声明常量,const 声明有以下特点
(1) 声明必须赋初始值
(2) 标识符一般为大写(建议)
(3) 不允许重复声明
(4) 值不允许修改
注意: 对象属性修改和数组元素变化不会触发 const 错误, 对象地址不可改变。
(5) 块儿级作用域
(6)、 不与顶层对象挂钩
应用场景:对于不希望被修改的值,用const,其他时候用let
javascript
<script>
//声明常量
const SCHOOL = 'bdqn';
//注意事项
//1. 一定要赋初始值
// const A;
//2. 一般常量使用大写(潜规则)
// const a = 100;
//3. 常量的值不能修改
// SCHOOL = 'bdqn';
//4. 块儿级作用域
// {
// const PLAYER = 'UZI';
// }
// console.log(PLAYER);
//5. 对于数组和对象的元素修改, 不算做对常量的修改, 不会报错
const TEAM = ['UZI','MXLG','Ming','Letme'];
// TEAM.push('Meiko');
// 6、 不与顶层对象挂钩
var myname = "zhangsan";
const myage = 18;
console.log(window.myname); //zhangsan
console.log(window.myage); //undefined
</script>
面试题 1.let和const的区别(/var,let,const的区别?)
let声明的变量可以改变,值和类型都可以改变(let:声明的是变量);
const声明的常量不可以改变,这意味着,const一旦声明,就必须立即初始化,不能以后再赋值,当然数组和对象等复合类型的变量,变量名不指向数据,而是指向数据所在的地址。
const只保证变量名指向的地址不变,并不保证该地址的数据不变。
let和const和var的区别
- let ,const声明的变量会产生块作用域,var 不会产生块作用域
- 不同代码块之间的变量无法互相访问
- 注意: 对象属性修改和数组元素变化不会出发 const 错误 (数组和对象存的是引用地址)
- 应用场景:声明对象类型使用 const,非对象类型声明选择 let
- cosnt声明必须赋初始值,标识符一般为大写,值不允许修改。