惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
C
CXSECURITY Database RSS Feed - CXSecurity.com
V
Visual Studio Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
小众软件
小众软件
L
LangChain Blog
Cyberwarzone
Cyberwarzone
美团技术团队
The Register - Security
The Register - Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tor Project blog
V
V2EX
Security Archives - TechRepublic
Security Archives - TechRepublic
Hacker News: Ask HN
Hacker News: Ask HN
L
LINUX DO - 最新话题
Recent Announcements
Recent Announcements
H
Hackread – Cybersecurity News, Data Breaches, AI and More
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
aimingoo的专栏
aimingoo的专栏
人人都是产品经理
人人都是产品经理
F
Full Disclosure
V2EX - 技术
V2EX - 技术
The Cloudflare Blog
博客园 - 叶小钗
T
Threat Research - Cisco Blogs
阮一峰的网络日志
阮一峰的网络日志
G
GRAHAM CLULEY
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Latest news
Latest news
S
Security @ Cisco Blogs
Spread Privacy
Spread Privacy
Project Zero
Project Zero
K
Kaspersky official blog
MyScale Blog
MyScale Blog
Attack and Defense Labs
Attack and Defense Labs
云风的 BLOG
云风的 BLOG
博客园 - 【当耐特】
Hacker News - Newest:
Hacker News - Newest: "LLM"
大猫的无限游戏
大猫的无限游戏
P
Privacy International News Feed
Google DeepMind News
Google DeepMind News
WordPress大学
WordPress大学
C
Cybersecurity and Infrastructure Security Agency CISA
Webroot Blog
Webroot Blog
罗磊的独立博客
Vercel News
Vercel News
N
News and Events Feed by Topic
A
Arctic Wolf
C
CERT Recently Published Vulnerability Notes

硅上观道・我的个人技术博客

函数式心法 (3):巧用柯里化和部分应用 函数式心法 (2):理解运用高阶函数 打造 NixOS 开发环境 (2):NixOS学习与配置入门指南 打造 NixOS 开发工作流 (1):为什么选择 NixOS Haskell 心法 (1):初识 - 为何学、学什么和怎么学 Clojure 笔记 (2):基本语法结构和 REPL 驱动编程 Clojure 笔记 (1):语言生态介绍和环境配置 当我们发现毕生追求的知识在AI面前毫无价值时,如何重建存在的意义? 5 月 28 日 DeepSeek R1 模型完成小版本试升级并开源,具体有哪些提升? 信息闭塞和被信息洪流冲刷,哪个弊端更大?谈错误信息的危害性 Rust CLI 实战:手搓微型 grep (4) 交互式处理错误文件名问题 Rust CLI 实战:手搓微型 grep (3) 更优雅的错误处理 Rust CLI 实战:手搓微型 grep (2) 实现软件第一版 Rust CLI 实战:手搓微型 grep (1) 新建项目 学计算机有什么好的获取学习资料的方法?掌握高效的资料收集技巧 有哪些看起来很高端的技术其实原理很暴力很初级?浅析CDN内容分发网络原理 学习编程可以为自己带来什么?- 理论与实践的紧密结合 长文 - 大一技术成长复盘:课程、竞赛与开源之旅 推荐一个IDE中的AI工具 - CodeGeex插件和AI辅助编程 关于本站 - 一篇旧文章,我对本站内容更新计划的最初想法 读书笔记:读庄子《齐物论》,探寻真正的自我 读书笔记 - 单向度的人:核心思想,内容解析以及我的感悟 一篇时评写作练习:矛盾与救赎 - 关于行善
前端笔记 (1):ES 标准和 ES6+ 变量定义方法
硅上观道 · 2025-06-03 · via 硅上观道・我的个人技术博客
技术教程

这篇文章我们来说说 Clojure 这个语言,Clojure 在 web 领域的生态情况,以及如何配置自己的本地环境使其能够顺畅编写 Clojure 代码。

从这篇文章开始,我将新开一个全栈开发笔记的专栏,专门记录我从基础开始学习前后端开发的收获和心得。

欢迎收藏本站或者关注我的专栏


ECMAScript 标准

我们在学习前端技术的时候常听说要打好JavaScript基础,那么什么是JavaScript基础呢?

在我看来,其中很重要的一个环节就是要学习符合最新 ECMAScript(也就是我们常说的 ES)标准JavaScript语言。

过去,我们总能看到网友用各种段子、梗图调侃JavaScript语言。实际上,这个语言确实在设计之初有着不少缺陷,给人的感觉就是不严谨。

JavaScript梗图1

JavaScript梗图2

但随着JavaScript和浏览器运行环境彻底绑定,成为前端事实标准后,有不少行业大佬在尝试引入新的语言风格和标准,来让这个语言变得更好。

此外,如果想要学习 TypeScript这个在JavaScript基础上更进一步、引入更严谨的类型系统的语言,则必须要学习和接受这些JavaScript的新标准,主流前端框架同样要求我们对这些内容有着较高的熟悉度。由此看来,学习 ES6+的JavaScript语法是非常有必要的。

JavaScript语言的新标准是由国际标准组织 ECMA International 推动的,所以这些标准又称ECMAScript 标准,简称 ES

这些标准在制定、形成共识后,会由主流的 Chrome、Firefox 等浏览器推动兼容,Node.js等主流运行时也跟进新特性支持,从而实现从语言设计到运行环境落地的过程。

ES标准演化时间线

其实 ES6 及以后的新标准内容是相当丰富的,我们一篇文章也很面面俱到。这篇文章,我将从最基本的变量声明内容讲起,一步步深入到更复杂的内容。


const/let的引入

过去JavaScript定义变量的唯一关键字就是var,而从 ES6 开始,我们一般建议使用constlet关键字来定义变量。

顾名思义,constlet的区别主要在可变和不可变上,其中let为可变引用,可以重复赋值;const声明的是不可重新赋值的绑定

需要注意的是,这里const的不可变性主要是指这个引用(或者再直白一点,内存地址)不能改变,但是如果被引用的对象或数组发生变化,这是合法的。

换言之,就是const对于原始类型是值不可变,对于对象、数组这样的复合类型就是地址不变。

举个例子:

const t = [1, -1, 3];
t.push(5);
console.log(t); // 合法,打印出[1, -1, 3, 5]
t = [1, -1, 3, 5]; // 不合法,不可重复赋值

这段代码是完全合法的,因为尽管t引用的数组新加入了一个数字 5,但是引用本身(内存地址)是没有改变的。

那么,你可能会问,这么做的好处是什么呢?

最显而易见的好处就是把可变和不可变引用分开了,代码更清晰,但是实际上还有更深层次的原因。

一个非常重要的原因就是原先var在设计变量作用域时存在缺陷。

var采用的是函数作用域,也就是说一个变量一经定义,在整个函数中都是可访问的。这种情况下可能会导致变量重复声明带来的数值覆盖,或者其他的意外行为。

反之,letconst采用的是相对更严谨的块作用域定义。也就是说,二者的作用域是明确限定在一对大括号{}里的。

我们来看一个例子:

function printing() {
  for (var i = 0; i < 10; i++) {
    console.log(i);
  }
  console.log(i);
}

这个函数打印出来的结果,除了for循环打印出的 0~9,for 循环外的console.log(i)会打印出 10。这一点,其实是不够理想的。

但是如果我们换用let来定义这个i变量:

function printing() {
  for (let i = 0; i < 10; i++) {
    console.log(i);
  }
  console.log(i); // ReferenceError: i is not defined
}

此时,for循环外的console.log(i)就会报出ReferenceError,因为let定义的变量是块级作用域,离开了 for 循环的块这个变量就不可以再访问了。


下一步写作计划

相信通过这简短的介绍,大家对 ES6+中最基本的变量定义问题有了初步的了解。

在后续几篇文章中,我将进一步展开讲解最新 ES 标准中的函数定义、解构赋值、异步编程等问题,然后逐步延伸到Solid.js前端框架以及基于Rust的后端框架,尽全力将全栈开发的知识用通俗易懂的语言讲清楚、讲明白。

欢迎关注我,我将给你带来更多精彩文章!