ES6 的let 、const
程序员文章站
2024-01-01 17:45:58
...
let :
ES6中新增用于声明变量的关键字
- let 声明的变量只在所处于的块级有效(什么是块级作用域? 就是一对大括号中产生的作用域,一对大括号就代表一个块级作用域)
<script>
if(true){
let a = 10;
console.log(a); // 10
if(true){
let c = 20;
console.log(c); // 20
}
console.log(c); // c is not defined
}
console.log(a) //a is not defined
</script>
使用 let 关键字声明的变量才具有块级作用域,使用 var 声明的变量不具备块级作用域特性;
if(true){
let x = 15;
var r = 22;
}
console.log(r); // 22
console.log(x); //x is not defined
拥有块级作用域还可以防止循环变量 变成 全局变量
for(var i = 0; i < 2; i++){
}
console.log(i); // 2
for(let p = 0; p < 2; p++){
}
console.log(p); // p is not defined
- let 声明的变量,不存在变量提升
console.log(m) // underfined
var m
// 只能先声明 才能使用
console.log(k); //Cannot access 'k' before initialization 初始化前无法访问“k
let k = 1;
经典面试题:
let arr = [];
for(let i = 0; i < 2; i++){
arr[i] = function(){
console.log(i) // 0 1
}
}
arr[0]();
arr[1]();
const:
ES6中新增用于声明变量的关键字
作用: 使用 const 关键字声明的变量称之为 “常量” ,所谓常量就是 值不能改变的量
- 使用 const 关键字声明的变量具有 块级作用域 只能在声明区域里使用,在外面是使用不了的
if(true){
const a = 2;
console.log(a); // 2
}
console.log(a); //a is not defined
- 使用 const 关键字声明的常量必须赋 初始值 ,要不然会报错
const x; // 报错:Missing initializer in const declaration 常量声明中缺少初始值设定项
const x = 5;
console.log(x);
- 使用 const 声明的常量的值 是不能进行修改的
const m = 3;
m = 6; // 报错:TypeError: Assignment to constant variable. 类型错误:分配给常量值。
但是如果声明的变量是复合类型的,则是可以修改其内部属性的,这时可以看作只是类型不可改变。
const arr = [12 , 25];
arr[0] = 48;
console.log(arr);
const arr = [12 , 25];
arr[0] = 48;
console.log(arr);
arr = [33, 2] // 报错: TypeError: Assignment to constant variable.
console.log(arr);
const abj = {
name: '李梅',
age: 18,
height: 180
}
abj.name = '韩磊';
console.log(abj);
var let const 之间的区别:
- 使用 var 声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象;
- 使用 let 声明的变量,其作用域为该语句所在的代码块内,不存在变量提升;
- 使用 const 声明的是常量,在后面出现的代码中 不能在修改常量的值,但是复合数据类型 可以修改其内部属性;