系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用
文章目录
0. 关于const let
- 作用:(1)不污染全局变量; (2)for 循环
- 使用习惯:默认情况下使用const,当知道变量值需要被修改时用let。
1. 块级作用域
if (true) {
var a = 1;
}
console.log(a); // 1
if (true) {
let a = 1;
}
console.log(a); // 报错
if (true) {
const a = 1;
}
console.log(a); // 报错
- 作用:(1)不污染全局变量; (2)for 循环
var a = [];
for (var i = 0; i < 3; i++) {
a[i] = function () {
console.log(i);
}
}
a[1](); // 3 用来计数的循环变量泄露为全局变量
var a = [];
for (let i = 0; i < 3; i++) {
a[i] = function () {
console.log(i);
}
}
a[1](); // 1
for循环特点之一,设置循环变量部分是父级作用域,循环体内部是一个单独的子作用域
for (let i = 0; i < 5; i++) {
let i = 'abc';
console.log(i); // 5次abc
}
2. let const 存在暂时性死区
if (true) {
console.log(a); //undefined
var a = 1;
}
if (true) {
console.log(a); //报错
let a = 1;
}
if (true) {
console.log(a); //报错
const a = 1;
}
- const let 存在暂时性死区TDZ, 所以变量一定要声明后再使用
if (true) {
// TDZ开始
a = 1; // 报错
console.log(a); // 报错
let a; // TDZ结束
console.log(a); // undefined
a = 2;
console.log(a); // 2
}
// 比较隐蔽的TDZ
function bar(x = y, y = 2) {
return [x, y]
}
bar(); // 报错
function bar(y = 2, x = y) {
return [x, y]
}
console.log(bar()); // [2,2]
3. let const 不允许重复声明
var a = 1;
var a = 2;
console.log(a); // 2
let a = 1;
let a = 2; // 报错
4. let const class 声明的全局变量,不属于顶层对象的属性
var a = 1;
console.log(window.a); // 1
let a = 1;
console.log(window.a); // undefined
const a = 1;
console.log(window.a); // undefined
在ES2020里,引入globalThis作为顶层对象,其在任何环境均存在
5. const 特性
//(1)const 只声明不赋值会报错
const a; //报错
let a; // 不报错
//(2)const 声明的变量不能改变值
var a = 3;
a = 4;
console.log(a); //4
let b = 1;
b = 2;
console.log(b); // 2
const c = 5;
c = 6; // 报错
- 原理:不是变量的值不能改动,是变量指向的内存地址所保存的数据不能改动。
(1)对于简单类型的数据(数值、字符串、布尔值),其值保存在内存地址中;
(2)对于复合类型的数据(数组、对象),指向的地址不能变,但可以修改数据的属性。
const foo = {};
foo.name = 'judy';
console.log(foo.name); // judy
foo = {}; // 报错