前言
其实,我觉得Javascript核心中重要的东西并非是从旧版本扩展来的高大上的语法,例如解构赋值啊、展开语法和剩余参数(嘛……虽然的确是很666),但是用好这些,其实都建立在你对变量的认识上(常有人不知道什么是左值或右值的区别)正因如此,我觉得了解一个Javascript还是从最基本做起,就是了解一下何为变量吧。
本文其实也并非完全基础,还是建立在对Javascript有一定了解之上的,至少对对象要有一定的认知。开始吧。
变量与数据
什么是变量?
越简单的问题答案往往越是让人感到意外,多数人的答案都与值有关;事实上变量就是程序可操作的存储区(术语内存空间),在Javascript程序运行时,存储区(术语就是内存空间)可以保存我们所需的任何东西,代码、数据……等等。然后可以将变量保存的数据大致上分割为两类:原始类型(同基本类型)和引用类型;从变量中取出来的数据就是值,把一个值放到变量中时,该值就又变成了数据。
Javascript和其他语言相似,变量也需要被声明才能实际存在,声明后的变量称之为实例化,为变量赋予一个值(默认为undefined)时,称之为变量的初始化,只是实例化而未初始化的变量都处于uninitialized状态。
例如:
let a = a ; // (*)
console.log(a);
// ReferenceError: can't access lexical declaration `a' before initialization
很完美的报错了(在(*)标志的位置),提示我们没有初始化这个变量时就无法使用。这是不同于C++这类底层的变量的地方。其实这种现象在Javascript有一个极为高大上的名字:暂存死区,等过几章节我就说明产生的原因。
(忘了说了,在变量声明也需要一个名字,术语称作标识符,我觉得不补充也不影响什么……)
不过Javascript另外特殊的地方在于,它对var声明的变量是可以自动初始化的,Javascript会自动会为var声明的变量赋予一个undefined值。
例如:
var a = a;
console.log(a); // undefined.
看吧,明明都差不多,结果却全然不同。
但是实际上却没什么卵用,见下面的代码:
var a = a;
console.log(a+2); // NaN
</

本文探讨了JavaScript中的变量,强调了变量作为内存空间的重要性,区分了原始类型和引用类型,并介绍了词法环境的概念。通过示例解释了变量声明、初始化以及JavaScript中的暂存死区。同时,文章阐述了词法环境与作用域的关系,包括全局作用域、函数作用域和块级作用域,以及词法环境的抽象表示。
最低0.47元/天 解锁文章
860

被折叠的 条评论
为什么被折叠?



