feat: Add JavaScript core exercises and solutions

- Implemented exercises for array high-order methods, memory and execution, switch statements, and final review.
- Added starter and answer files for each exercise to facilitate learning.
- Created a runner HTML file to execute JavaScript code and display console outputs.
- Updated README files to include exercise objectives, tasks, and usage instructions.
This commit is contained in:
charlie
2026-03-13 11:09:19 +08:00
parent 4495ae0e28
commit 877acb5a8f
51 changed files with 1949 additions and 5 deletions

View File

@@ -0,0 +1,47 @@
# 练习 16总复习
## 目标
把基础练习和补充练习里的关键知识点串起来,完成一个真正的总复盘脚本。
## 项目名称
学习营总复盘器
## 你要练什么
- 对象和对象方法
- `this`
- 数组高阶函数
- `switch`
- `break`
- `undefined` / `null`
- 引用类型
- 函数封装
## 任务
请完成一个控制台版“学习营总复盘器”,要求至少包含:
- 一个带方法的 `reviewer` 对象
- 一个 `lessons` 数组
- 一个用 `switch` 输出阶段说明的函数
- 一个用 `for + break` 清洗有效数据的过程
- 至少两个数组高阶函数
-`undefined``null` 的判断
- 一段对象引用变化的观察代码
- 最终输出标题、有效课程、平均分、完成状态
## 自检标准
- 是否把数据、判断、统计拆成了清晰步骤
- 是否正确使用了 `this`
- 是否知道什么时候该 `break`
- 是否能区分 `undefined``null`
- 是否能看出对象引用共享带来的变化
- 输出信息是否完整、可读
## 文件
- [starter.js](/Users/lijiaqing/home/wwwroot/front-end-example/03-javascript-core/16-final-review/starter.js)
- [answer.js](/Users/lijiaqing/home/wwwroot/front-end-example/03-javascript-core/16-final-review/answer.js)

View File

@@ -0,0 +1,70 @@
const reviewer = {
name: "林晨",
stage: "final-review",
showTitle() {
console.log(`${this.name} 的学习营总复盘`);
},
};
const lessons = [
{ title: "变量", score: 80, finished: true },
{ title: "闭包", score: 92, finished: true },
{ title: "this", score: 87, finished: true },
{ title: "补漏练习", score: null, finished: false },
{ title: "综合回顾", score: 95, finished: true },
];
let mentorNote;
const reviewComment = null;
function getStageText(stage) {
switch (stage) {
case "basic":
return "基础阶段";
case "advanced":
return "补充阶段";
case "final-review":
return "总复习阶段";
default:
return "未知阶段";
}
}
reviewer.showTitle();
console.log("阶段说明:", getStageText(reviewer.stage));
console.log("mentorNote 是否为 undefined", mentorNote === undefined);
console.log("reviewComment 是否为 null", reviewComment === null);
const validLessons = [];
for (let index = 0; index < lessons.length; index += 1) {
const lesson = lessons[index];
if (lesson.score === undefined || lesson.score === null) {
console.log(`在《${lesson.title}》处遇到空成绩,停止读取后续项目。`);
break;
}
validLessons.push(lesson);
}
const lessonTitles = validLessons.map(function (lesson) {
return lesson.title;
});
const averageScore =
validLessons.reduce(function (total, lesson) {
return total + lesson.score;
}, 0) / validLessons.length;
const allFinished = validLessons.every(function (lesson) {
return lesson.finished === true;
});
const reviewerAlias = reviewer;
reviewerAlias.stage = "advanced";
console.log("引用修改后的 reviewer.stage", reviewer.stage);
console.log("有效课程:", lessonTitles.join("、"));
console.log("平均分:", averageScore);
console.log("是否全部完成:", allFinished);

View File

@@ -0,0 +1,30 @@
const reviewer = {
name: "林晨",
stage: "final-review",
showTitle() {
// 输出总复盘标题
},
};
const lessons = [
{ title: "变量", score: 80, finished: true },
{ title: "闭包", score: 92, finished: true },
{ title: "this", score: 87, finished: true },
{ title: "补漏练习", score: null, finished: false },
{ title: "综合回顾", score: 95, finished: true },
];
let mentorNote;
const reviewComment = null;
function getStageText(stage) {
// 用 switch 返回阶段说明
}
// 任务:
// 1. 调用 reviewer.showTitle()
// 2. 输出 mentorNote 和 reviewComment 的区别
// 3. 用 for + break 提取 lessons 中 score 有效的项目
// 4. 用高阶函数统计课程标题、完成状态和平均分
// 5. 创建 reviewerAlias 指向 reviewer修改 stage观察原对象是否变化
// 6. 输出最终结果