let 和 const
-
作用域的概念
全局作用域,函数作用域,块作用域
-
如何使用let和const
- 在ES6里加入严格模式
- 'use strice'; //整个js文件都是严格模式下执行的
- 引入了块作域的概念(如何区分块作域 - 用{}大括号包起来就是块作域)
let 定义
- 有块作域
- 不能重复使用let定义同一个变量名
使用的是块级作用域,变量声明只在代码块内有效
function test () {
for(let i =1;i<3;i++){
console.log(i)
}
console.log(i)//有作用域这个打印i 是会报错的
let a =1
//let a =2 // 语法错误
}
test ()
const
- 有块作域
- const声明的常量,也和let一样不可重复声明。
function last (){
const PI = 3.1415926
const k = { //定义常量对象 可以为添加属性
a= 1
}
k.b =3
console.log(PI,K)
}
last()
const声明的常量也不提升,同时存在暂时性死区,只能在声明的位置后面使用
if (true) {
console.log(i); // 报错
const i = 5;
}
将一个数组声明为常量,该数组本身是可写的,但是若将另一个数组赋值给该数组,会报错
const arr = [];
arr.push(1);
arr = [1,2,3,4]; // 报错
对于复合类型的常量,常量名不指向数据,而是指向数据所在的地址。const命令只是保证常量名指向的地址不变,并不保证该地址的数据不变,也就是说,将对象常量指向另一个地址会报错,但对象本身是可变的,可以为其添加,修改属性,因此将一个对象声明为常量必须十分小心