变量
由变量提出下面几个问题。
什么是变量?
变量有什么用?
如何使用变量?
变量中有哪些潜规则?
根据以上问题,逐一的整理一下自己所学,也欢迎大家补充有关变量相关的知识。
什么是变量?
变量是一块内存空间,用来存储数据的。
那为什么是内存空间呢?为什么不是硬盘空间呢? 下面来探究一下内存和硬盘的优劣势。
- 内存:读取速度快,内容易丢失
- 硬盘:读取速度慢,但是不易丢失
如果我们用硬盘来存储的话,那么代码的运行速度。。。想想自己都会崩溃。所以我们程序用内存进行存储,读取速度快,刷新页面后之前的数据就丢失了会重新加载新的数据。硬盘通常来存什么呢?我们电脑文件,重启后不会消失仍然保存的文件就是存在我们硬盘当中的。
❝计算机程序的运行,仅与内存打交道
❞
变量有什么用?
变量的作用就是用于存储数据的。 在没有变量时,我们没有办法去保存我们的数据,但是有了变量我们的数据可以保存起来,等到需要使用该数据的时候在去使用。
//直接输出的数据
console.log(11);
//现在不想要直接输出数据,想把数据先保存下来,后面再使用
var a;
a = 11;
//这样数字字面量11就保存到变量a里面啦,后面我们需要使用数据11的话,直接用变量a就可以啦
在这里引申出来一个我一直出错的一个问题。 变量和字面量的区别是什么?
字面量是我们直接书写出来的数据,比如123称为数字字面量,'123'称为字符串字面量,{}称为对象字面量;将这些直接书写出来的数据存储起来,存储的容器就是变量。
字面量可以直接输出。 但是变量中未经声明直接使用的话是会报错滴。
console.log(123); //这里的123就是数字字面量
var a = 123;
console.log(a); // a是变量 也可以输出
console.log(b); //报错 前面没有声明变量b直接使用就会报错
如何使用变量
- 使用变量分为两步
- 变量声明
var 变量名;
var a; // 变量声明的过程 开一个新的内存空间a
「变量声明后,它的值为undefined」 如果声明变量,不对其进行赋值。 说明其是未被定义的。 输出只声明为赋值的变量,结果是undefined。
var a;
console.log(a); // undefined
- 变量赋值
向变量的内存空间中存放数据
a = 1; // 变量赋值过程 将1赋给a
变量声明和变量赋值可以称之为「初始化变量」
- 变量的值是可变的
变量可以被重新赋值,新的值会覆盖原来的值
var a = 1;
console.log(a); // 1
a = 2;
console.log(a); // 2
var a = "hello";
var b = a; // 将变量a的数据复制到变量b中
b = "world"; // 不会影响a
console.log(a, b); // "hello" "world"
- 变量的名称
在开发中,凡是需要自行命名的位置,叫做标识符
- 变量命名的规则
一切需要我们命名,成为标识符
[必] 变量名可以以_,$,英文字母开头
[必]其他部分可以是_,$,英文字母,和数字
[必] 变量名不能是关键字和保留字
[选]变量名要望文知义
[选]如果有多个单词,使用驼峰命名法,单词首字母大写
大驼峰:每个单词首字母大写
小驼峰:除第一个单词外,首字母大写
目前,使用的标识符都是小驼峰命名法。
- 声明和赋值合并
变量的声明和赋值可以一条语句书写。
var a = 1;
// 程序实际执行的过程
var a;
a = 1;
这是语法糖。
语法糖仅仅是为了方便代码书写或记忆,程序执行并不会有实质性的改变。
- 多个变量可以合并声明并赋值 (单一var模式)
var a = 1,
b = 2,
c = 'wjh';
// 程序实际运行过程
var a;
var b;
var c;
a = 1;
b = 2;
c = 'wjh';
语法糖
变量中有哪些潜规则?
「任何可以书写数据的地方,都可以书写变量」
若使用一个未声明的变量,会导致错误
例外:使用typeof得到类型时,可以是未声明的变量,得到的结果是undefined
console.log(typeof a); // undefined
- 「JS中存在变量提升」
所有变量的声明,会自动的提到代码的最顶部。但是,这种提升,不会超越脚本块。(所有的变量声明会提升到当前脚本块代码的最顶端。)
通过一个看一窜代码运行问题来解释
console.log(a,b); //undefined undefined
var a = 1;
var b;
console.log(a,b); // 1 undefined
js代码是从上到下执行,第一句执行 console.log(a,b); 当时 a和b 还没声明,按说应该报错,但是为什么没报错呢?
这其中发生了变量提升的过程。 实际上代码执行内部是这样的
var a;
var b;
console.log(a,b);
a = 1;
console.log(a,b);
看完这个 上面的答案就清晰啦。
<script>
console.log(a, b); // 报错
</script>
<script>
// console.log(a, b);
// var a = 1;
// var b;
// b = 3;
//等效于
var a;
var b;
console.log(a, b);
a = 1;
b = 3;
</script>
- JS中允许定义多个同名变量
同名变量,提升后会变成一个。
console.log(myName); //undefined
var myName = 'wjh';
var myName = '234';
console.log(myName);// '234'
//实际发生过程
var myName;
console.log(myName);
myName = 'wjh';
myName = '234';
console.log(myName);