JS 初了解:从“网页玩具”到企业级语言的进化

很多人对 JavaScript 的第一印象是"乱"、"奇怪",甚至觉得它是个"玩具语言"。其实,JS 的混乱很大程度上是因为它出生得太快,成长得太猛。这篇文章带你快速理清 JavaScript 到底是什么,以及为什么我们要学 ES6。


一、JavaScript 的身世:蹭热度的一周工程

JavaScript 诞生于 1995 年,它的名字其实是一场营销奇迹

  • 蹭 Java 的热度 :当时 Java 正如日中天,网景公司(Netscape)为了让这门新语言火起来,硬是给它起了个名字叫 JavaScript。实际上,除了名字里都有"Java",两者毫无关系。
  • 仅用 10 天设计 :早期的 JS 是为了给静态网页加点"特效"(比如图片轮播、弹窗)而设计的。由于时间紧迫,设计上存在很多妥协和瑕疵(比如 ==的隐式转换)。
  • ECMAScript 标准 :我们现在说的 ES5、ES6,其实是遵循 ECMAScript(简称 ES) 这个标准规范的 JavaScript 实现。

二、为什么突然要学 ES6?

2015 年之前,JS 主要用来做简单的 DOM 操作。但随着 Web 应用越来越复杂(像 Gmail 这样的单页应用出现),老旧的语法(ES5)已经无法满足企业级大型项目的开发需求。

于是,ES6(ECMAScript 2015) ​ 横空出世。它不是简单的补丁,而是一次彻底的升级,引入了 letconst、箭头函数、类(Class)等现代语言特性,让 JS 终于成为了一门正经的编程语言。


三、变量声明:告别 var,拥抱 letconst

在早期 JS(ES5)中,只有 var用来声明变量。但 var有很多"坑",所以在现代 JS(ES6+)中:

关键字 含义 特点
**var**​ 过时 有变量提升、没有块级作用域,容易造成污染,现在基本不用。
**let**​ 变量 可以被重新赋值,有块级作用域,最常用。
**const**​ 常量 Constant ,声明时必须赋值,且不能被重新赋值

举个栗子 🌰

ini 复制代码
// 错误示范(不要用)
var name = "Old JS";

// 现代写法
let age = 25;      // 年龄会变,用 let
age = 26;          // ✅ OK

const PI = 3.14;   // 圆周率不变,用 const
PI = 3.15;         // ❌ 报错:Assignment to constant variable

最佳实践 :默认使用 const,只有当确定这个值需要改变时,才使用 let


四、作用域:变量住在哪个"房间"?

作用域(Scope) ​ 决定了变量在哪里可以被访问。JS 中有三种主要的作用域:

  1. 全局作用域:在最外层声明的变量,哪里都能用(尽量少用,容易冲突)。
  2. 函数作用域:在函数内部声明的变量,只有函数内部能用。
  3. 块级作用域(ES6 新增) :用 {}包裹起来的区域(比如 iffor循环)。

查找规则:"冒泡查找"

当你使用一个变量时,JS 引擎会这样找:

  1. 先在当前作用域找。
  2. 找不到?去外层作用域找。
  3. 再找不到?再去更外层找。
  4. 直到全局作用域,如果还没找到,就报错:ReferenceError: XXX is not defined

为什么 let/const更安全?

var没有块级作用域,会导致变量"泄漏"到外面,引发难以排查的 Bug。而 letconst被限制在 {}内部。

javascript 复制代码
if (true) {
    var a = 10;   // var 没有块级作用域
    let b = 20;   // let 有块级作用域
}

console.log(a); // 10 (泄漏了)
console.log(b); // ❌ 报错:b is not defined

五、内存与生命周期:用完就扔

从内存角度看,代码执行是这样的:

  1. 声明变量:在内存中申请一块区域存放数据。
  2. 执行代码:使用这块数据。
  3. 垃圾回收:当函数执行完毕或代码块结束,JS 的垃圾回收机制会自动销毁这些不再使用的变量,释放内存。

这也是为什么在函数内部定义的变量,在外面访问不到的原因------房子拆了,里面的东西也没了


六、常见报错速查

错误信息 含义 解决办法
Assignment to constant variable 试图修改 const常量 改用 let,或者不要改它
XXX is not defined 变量未定义 检查拼写,或确认是否声明了
Cannot access 'x' before initialization 在声明前访问了 let/const 把代码移到声明之后

总结

JavaScript 虽然起步匆忙,但凭借 ES6 的现代化改造,已经成为前端乃至全栈开发的核心。记住最核心的一点:忘掉 var,用 letconst来管理你的变量,并时刻留意它们所在的"作用域房间"。

这篇总结你还满意吗?如果需要,我也可以帮你把它改写成更适合面试背诵 的精简版,或者针对作用域链画一张图解。

相关推荐
月月大王的3D日记1 小时前
Three.js 材质篇(中):从兰伯特到PBR,一篇文章看懂五种光照材质
前端·javascript
且白1 小时前
leaflet切片变色、地图滤镜逻辑实现 colorfilter
前端·javascript
丷丩1 小时前
MapLibre GL JS第30课:添加视频
javascript·音视频·gis·mapbox·maplibre gl js
techdashen2 小时前
拆开任意 Electron 应用:从 Windows 安装包到 Discord 的私有更新协议
javascript·windows·electron
ZengLiangYi2 小时前
多格式文件解析:JSONL / SQLite / Event Stream
前端·javascript·后端
万少2 小时前
湖南卫视的秘密武器曝光!芒果灵创,专业AI影视创作平台
前端·javascript·后端
槑有老呆2 小时前
解密 JS 变量提升:告别玄学,读懂 V8 编译与代码执行逻辑
javascript
东风破_2 小时前
一文搞懂 JavaScript 变量声明:var、let、const 到底有什么区别?
前端·javascript
无糖可可果2 小时前
拆穿 JavaScript 变量提升的"魔术"——从一段反直觉代码说起
javascript