let 和 const
1.let和const是什么?
声明变量或常量
var 声明变量
let代替var 声明常量
const声明常量constant
注意:
var let 初始化以后还可以重新赋值
const 初始化后 不允许重新赋值
var username = 'xiaohong';
let age = 18;
const sex = 'nan'
console.log(username, age, sex); //xiaohong 18 nan
age = 20;
sex = 'nv'
console.log(username, age, sex);//报错
2. const
为什么需要const?
const的出现,就是为了让那些一旦初始化,不希望被重新赋值的情况设置的
//let
let sex = 'nan';
//...
sex = 'nv';
console.log(sex);//nv
const sex = 'nan';
sex = 'nv';
console.log(sex);//报错
const的注意事项
1.一旦声明要立即初始化
const o; //错误
o = 123; //错误
2.const声明的常量,允许在不重新赋值的情况下修改他的值
基本数据类型 -(不能在修改)
const sex1 = 'nan';
sex1 = 'nv';
//引用数据类型
const person = {
username: 'xiaohong'
};
person = {};//错误
person.username = 'zhangsan';
console.log(person);//{username: "zhangsan"}
什么时候用let 什么时候用const
for (let index = 0; index < array.length; index++) {}
const username = 'zhangsan';
username = 'lisi'; //无妨,错误不会被湮灭
3.var let const 的区别
1.重复声明
已经存在的变量或常量 又重新声明一次
var 允许重复声明 let const不允许
var a = 1;
var a = 2;
console.log(a); //2
let b = 1;
let b = 2;
console.log(b); //报错
2.变量提升
var 会提升变量的声明到当前作用域的顶部
// console.log(a); //报错
console.log(a); //undefined
var a = 1;
// 相当于
var a;
console.log(a);//undefined
// let和const不存在变量提升
console.log(a); //报错
let a = 0;
3.暂时性死区
只要作用域内存在let const,他们所声明的变量或者常量就自动“绑定”这个区域,
不再受到外部作用域的影响
let const 存在暂时性死区
let a = 1;
let b = 0;
function fun() {
console.log(b); //0
console.log(a); //报错
let a = 1; //暂时性死区
}
fun();
4.window对象的属性和方法
在全局作用域中,var声明的变量,通过function声明的函数,会自动变成window对象的属性或方法
let const 不会
//var/function
var age = 18;
function add() {}
console.log(window.age); //18
console.log(window.age == add); //true;
//let/const
let age = 18;
function add() {}
console.log(window.age); //undefined
console.log(window.age == add); //false;
5.块级作用于
什么是块级作用域?
- var 没有块级作用域
for (var i = 0; i < 3; i++) {
console.log(i); //0,1,2
}
console.log(i); //3
- let const有块级作用域
for (let i = 0; i <= 3; i++) {
console.log(i); //0,1,2
}
console.log(i); //报错
- 作用域链
{}
{
let age = 18;
console.log(age); //18
}
console.log(age); //报错
for(){}
while(){}
do{}while()
if(){}
switch(){}
4.小结
- let 和 const 是什么
let:声明变量
const:声明常量 - const
const 声明的是常量
const 声明后必须立即初始化
const 声明的常量可以修改,但不能重新赋值 - let、const 与 var 的区别
重复声明
变量提升
暂时性死区
块级作用域(重点)
window 对象的属性和方法(全局作用域中) - 块级作用域
有哪些块级作用域:
{}、for、while、do while、if、switch