今天看了张技术学习卡片,把类型系统和源码到运行的路径理得很清楚,记录一下:

1. 静态类型(Java)VS 动态类型(JS)
- Java:像「固定的盒子」——变量有类型,编译期检查,类型固定,安全可预测
- JS:像「可变的标签」——运行时绑定类型,类型可变,灵活但需谨慎
int age = 32;
age = "hello"; // ❌ 编译错误
let age = 32;
age = "hello"; // ✅ 合法
2. 转译 VS 编译 VS JIT
3. 最容易被误解的几点(对前端尤其重要)
- "JS 也有类型所以是静态类型" → 错,JS 类型运行时绑定
- "Babel 会做类型检查" → 错,Babel 只转译语法,类型检查要靠 TS 工具
- "Java 代码直接被 JVM 执行" → 错,JVM 执行字节码
- "JS 是纯解释执行" → 错,V8 在运行时把热点代码编译成机器码
一句话总结:转译降语法,编译产字节码,运行时再即时编译,最终机器码执行。动态和静态各有优缺,按场景选择。