第三周(9.30-10.6)学习笔记 24软工陈奕君
学习收获:
1.学习了JavaScript进阶语法,ES6还有异步编程
学习笔记:
ES6:
let:变量
const:常量
var:声明的变量存在变量提升的问题,在变量声明之前就可以访问到变量,可能导致意外的结果
插入变量:通过${}语法,可以在字符串中插入变量。变量会被解析并替换为实际的值。const name = "Alice";
const message = Hello, ${name}!;
console.log(message); // 输出 "Hello, Alice!"
反引号(`)包围:模板字符串必须使用反引号(`)而不是单引号或双引号来包围
解构赋值:const {name, age} = {name: "Alice", age: 20};
剩余:在函数定义时,使用三个点(…)后跟一个参数名称来声明剩余参数
数组:
forEach:遍历整个数组
Array.from:将一个类数组对象或可迭代对象转换成一个真正的数组
const arr1 = Array.from("hello");
console.log(arr1); // 输出: ["h", "e", "l", "l", "o"]
const arr2 = Array.from([1, 2, 3], x => x * 2);
console.log(arr2); // 输出: [2, 4, 6]
箭头函数:参数列表由圆括号包围,后面跟着一个箭头(=>),然后是函数体(可以是一个代码块或一个表达式)
(argument1, argument2, ...) => {
// 函数体
}
异步处理:
Promise:代表一个异步操作的最终完成(成功 fulfilled)或失败(rejected)及其结果值。它是一种封装异步状态和结果的容器。
状态:
pending:初始状态(进行中)。
fulfilled:操作成功完成。
rejected:操作失败。
创建:CONST a = new Promise(function(resolve, reject) => { /* 异步操作 */ })
pedding->初始状态:调用promise时,一开始就呈现出等待状态,遇到resolve或者reject之前,都处于这个状态,且可以改变,但如果确定了状态(fulfilled/reject),则结果将永远不变,不能再次修改
fulfilled->成功状态:在执行了resolve后,promise则会从pedding变成fulfilled,后续会进入.then 的回调函数中,在回调函数的第一个参数函数中可以获取到值
rejected->失败状态:在执行了reject后,promise状态会变成rejected,rejected函数传递的参数,可以在.then的第二个参数函数中获取的到,或者是在.catch获取到,但是如果程序上的错误,得通过.catch函数去拿到失败消息,在.then中是获取不了的
使用 .then(onFulfilled, onRejected) 方法添加处理函数(也可单独用 .catch(onRejected)处理错误 .then() 返回一个新的 Promise,支持链式调用。.finally() 无论成功失败都执行。
一般异常用.catch。拒绝状态用.then
async / await:基于 Promise 的异步编程终极解决方案
本质: async 和 await 是建立在 Promise 之上的语法糖,目的是让异步代码看起来和书写起来更像同步代码,极大提升可读性和可维护性。
async 关键字: 用于声明一个异步函数。async function myAsyncFn() {...}。调用 async 函数总是返回一个 Promise 对象。如果函数内显式返回一个值,该值会被包装成一个 resolved 的 Promise;如果函数内抛出异常,会返回一个 rejected 的 Promise。
await 关键字: 只能在 async 函数内部使用。await promiseExpression;。它会暂停 async 函数的执行,等待后面的 Promise 完成(resolve 或 reject):
如果 Promise 成功 resolve,await 返回其 resolved 的值。
如果 Promise 被 reject,await 会抛出这个异常值(可以使用 try...catch 捕获)。
核心优势:
代码结构完全同步化,告别回调嵌套和 then 链。
使用熟悉的 try...catch 进行错误处理,逻辑更清晰。
控制流(条件判断、循环)写法和同步代码完全一致。
注意: 滥用 await 可能会导致不必要的顺序执行(本该并行的请求变成串行),此时应结合 Promise.all() 等。