【JavaScript】week8-summary

作者:mario 发布时间: 2026-08-26 阅读量:6 评论数:0

第 8 周总结:流程控制与函数 — 程序有了"逻辑"

蜗牛往上爬 · 前端工业可视化学习笔记 第 8 周总结
本周从"直线执行"升级到"有逻辑的程序":条件判断让程序会做选择,循环让程序会干重复的活,函数让逻辑可复用,闭包和 this 则是通往 JS 进阶的第一道门。


目录


一、本周学了什么

天数

主题

核心知识点

产出

Day 1-2

条件与循环

if/else、三元、switch 穿透、for/while/do while、break/continue、循环嵌套

九九乘法表

Day 3-4

函数基础

声明/表达式、参数与返回值、arguments、作用域、变量提升

计算器函数

Day 5-6

闭包与 this

闭包计数器、状态缓存、this 指向规则、this 丢失的坑、IIFE

闭包计数器 Demo

知识图谱

流程控制与函数
├── 条件判断
│   ├── if / else if / else(从上到下,命中即停)
│   ├── 三元运算符(简单二选一)
│   └── switch(一变量多情况,注意 break 穿透)
│
├── 循环
│   ├── for(已知次数)
│   ├── while(未知次数,防死循环)
│   ├── do while(至少执行一次)
│   ├── break(终止)/ continue(跳过)
│   └── 循环嵌套(九九乘法表)
│
├── 函数
│   ├── 函数声明(整体提升)vs 函数表达式(不提升)
│   ├── 参数(undefined 时用 || 设默认值)
│   ├── return(立即结束;不写返回 undefined)
│   ├── arguments(伪数组,所有实参)
│   ├── 作用域(内访问外,外不能访问内)
│   └── 变量提升(var 声明提升,赋值不提升)
│
├── 闭包
│   ├── 定义:函数 + 外部变量
│   ├── 场景:计数器、状态缓存、日志前缀
│   └── 价值:保护私有数据
│
├── this
│   ├── 规则:谁调用指向谁
│   └── 坑:赋值给变量/回调后丢失
│
└── IIFE
    └── (function(){})():独立作用域,模块化雏形

二、核心知识速记

三条铁律

  1. switch 每个 case 要么 return 要么 break——否则穿透

  2. 函数内部能访问外部变量,反之不行——闭包的基础

  3. this 看点号前面是谁——赋值给变量后 this 就丢了

在工业可视化里的应用场景

知识点

应用场景

if/else

温度分级告警、设备状态判断

switch

状态码转文字、错误码处理

for 循环

遍历设备列表渲染表格

while

轮询等待设备上线

break

找到第一个异常设备就停止遍历

函数封装

数据格式化、单位转换、校验逻辑

闭包

设备状态缓存、图表数据缓存

IIFE

插件/模块的私有作用域


三、本周踩过的坑

坑点 1:switch 忘写 break

// ❌ case 1 命中后继续执行 case 2 的代码
switch (code) {
  case 1:
    console.log("待机");
  case 2:
    console.log("运行中");  // 也会输出!
}

// ✅ 用 return(在函数里)或 break
function getStatus(code) {
  switch (code) {
    case 1: return "待机";
    case 2: return "运行中";
  }
}

坑点 2:while 死循环

// ❌ 忘记 i++,条件永远为 true,页面卡死
var i = 0;
while (i < 5) {
  console.log(i);
}

// ✅ 循环体内更新条件变量
var i = 0;
while (i < 5) {
  console.log(i);
  i++;
}

坑点 3:函数表达式先调用后定义

// ❌ 报错:bye is not a function
bye();
var bye = function () { console.log("Hi"); };

// ✅ 函数声明可以先调用后定义(整体提升)
hi();  // "Hi"
function hi() { console.log("Hi"); }

坑点 4:this 在回调中丢失

// ❌ this.name 是 undefined
var device = {
  name: "CNC-001",
  show: function () { console.log(this.name); }
};
setTimeout(device.show, 1000);  // undefined

// ✅ ES5 的解决方法:用闭包保存 this(ES6 箭头函数更优雅,后续学)
setTimeout(function () {
  device.show();  // "CNC-001"(device 调用)
}, 1000);

四、自测清单

  • [ ] if/else if/else 的执行顺序是什么?

  • [ ] switch 不写 break 会发生什么?

  • [ ] for 和 while 分别适合什么场景?

  • [ ] break 和 continue 的区别?

  • [ ] 函数声明和函数表达式在"提升"上有什么区别?

  • [ ] 函数不写 return,返回值是什么?

  • [ ] arguments 是什么?它是真数组吗?

  • [ ] 全局作用域和局部作用域的访问规则?

  • [ ] 什么是变量提升?var 的提升规则?

  • [ ] 什么是闭包?举一个实际使用场景

  • [ ] this 的判断规则是什么?

  • [ ] 方法赋值给变量后 this 会怎样?

  • [ ] IIFE 的写法和作用?


五、下周预告

第 9 周:对象、数组与 JSON

天数

主题

Day 1-2

对象(字面量、属性操作、for…in 遍历、方法中的 this)

Day 3-4

数组基础(增删改查、push/pop/splice/join)

Day 5-6

高阶方法与 JSON(forEach/map/filter/reduce、JSON 序列化)

对象和数组是 JS 中最重要的数据结构——工业大屏的所有数据(设备列表、传感器读数、告警记录)都是用它们承载的。学完下周,就能对"一批数据"做批量处理了。


🚀 第 8 周完成!程序已经"有逻辑"了,下周让数据"有结构"。

评论