
2024-11-23 日报 Day15

今日的鸡汤
你有多自律,就有多自由。
今日学习内容
1、JS红皮书P21-29 第三章:语言基础
今日笔记
1、标识符:指变量、函数、属性的名字,或者函数的参数。标识符可以是下列几种:
- 第一个字符必须是一个字母、下划线(_)或一个美元符号($);
- 其他字符可以是字母、下划线、美元符号或数字;
2、注释:单行注释以两个斜杠(//)开头,多行注释以斜杠加星号(/)开头,以星号加斜杠(/)结尾。
macOS系统中,可以使用 Command + / 快捷键来快速注释代码。
1 | 单行注释: |
3、严格模式: 通过在脚本开头添加”use strict”,可以强制开启 ECMAScript 5 的严格模式。use strict是一个预处理指令,用于指定代码在严格模式下执行。
也可以单独在函数内部开启严格模式。
1 | ; |
4、关键词和保留字:ECMAScript中有一些关键词和保留字,它们有特殊用途,不能用作标识符。
- 关键词:break、case、catch、continue、debugger、default、delete、do、else、false、finally、for、function、if、in、instanceof、new、null、return、switch、this、throw、true、try、typeof、var、void、while、with
- 保留字:abstract、boolean、byte、char、class、const、debugger、double、enum、export、extends、final、float、goto、implements、import、int、interface、long、native、package、private、protected、public、short、static、super、synchronized、throws、transient、volatile
5、变量:ECMAScript 的变量是松散类型的,可以用来保存任何类型的数据。有三种方式声明变量:var、let、const。 - var:
- 声明作用域:函数作用域
- 变量提升:变量声明会被提升到函数作用域的顶部
1
2
3
4
5
6function foo() {
console.log(age); // undefined
var age = 26;
console.log(age); // 26
}
foo(); - let:
- 声明作用域:块作用域
1
2
3
4
5
6
7
8
9
10
11if (true) {
var name = 'Matt';
console.log(name); // Matt
}
console.log(name); // Matt
if (true) {
let age = 26;
}
console.log(age); // ReferenceError: age is not defined - 变量提升:不存在变量提升
1
2
3
4
5
6function foo() {
console.log(age); // ReferenceError: Cannot access 'age' before initialization
let age = 26;
console.log(age); // 26
}
foo(); - let的暂时性死区:在块作用域内,使用 let 声明的变量不会被提升,而且在声明之前使用这个变量会抛出错误。
1
2
3
4
5
6// 暂时性死区
if (true) {
console.log(name); // ReferenceError: Cannot access 'name' before initialization
let
name = 'Matt';
} - 全局声明:使用let声明的全局变量不会成为window对象的属性。
1
2
3
4let name = 'Matt';
console.log(window.name); // undefined
var age = 26;
console.log(window.age); // 26 - 条件声明:使用let声明的变量只在块作用域内有效。
1
2
3
4if (true) {
let name = 'Matt';
}
console.log(name); // ReferenceError: name is not defined - for循环中的let声明:
在let出现之前,for循环定义的迭代变量会渗透到循环体外部。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21for(var i = 0; i < 5;++i){
}
console.log(i); // 5
for(let i = 0; i < 5;++i){
}
console.log(i); // ReferenceError: i is not defined
for(var i = 0; i < 5;++i){
setTimeout(() => {
console.log(i); // 5 5 5 5 5
}, 0);
}
for(let i = 0; i < 5;++i){
setTimeout(() => {
console.log(i); // 0 1 2 3 4
}, 0);
} - const:声明一个只读的常量。一旦声明,常量的值就不能改变。const 声明的限制只适用于它指向的变量的引用,而不适用于它指向的变量的值。
1
2
3
4
5
6
7
8
9
10
11const PI = 3.1415926;
PI = 3; // TypeError: Assignment to constant variable.
// const也不允许重复声明
const name = 'Matt';
name = 'Nicholas'; // TypeError: Assignment to constant variable.
// const声明的作用域也是块
const name = 'Matt';
if (true) {
const name = 'Nicholas';
}
console.log(name); // Matt
const person = {};
person.name = 'Matt';
console.log(person.name); // Matt