Excel宏(JSA)教程——变量

变量是啥?

所有编程语言都有,每种编程语言所代表的含义也大同小异。

什么是变量?

变量是用于存储数据的标识符号。

在Javascript语言环境中怎样理解这个定义呢?

我认为变量就是个容器。

在Javascript中,这个容器一旦被定义出来,什么都可以装。

var i;

//此处定义了一个变量i

这个变量i被定义出来之后,我们后面在使用的时候可以让这个变量等于各种各样的值。

i = 12; //此时这个i表示一个整数

i = 12.5; //此时这个i又代表了一个小数

i = "你好"; //此时这个i又代表了一个字符串

以上三次赋值,都是这个变量i,名称不曾改变,但每次赋值之后,就重新给个变量赋予一个新的意义,每次新的意义被赋予之后就无法再获取上一被赋予的值。

其实大家早就接触过变量,就是我们小学时学过的未知数。

如何定义变量?

Javascript中定义变量有三个关键字:var、let、const

定义变量的语法格式就是:

关键字 变量名;

//例如

var birth;

let name;

const WORK_DAY = 5;

变量的作用范围

啥是变量的作用范围?

顾名思义就是当一个变量被定义出来后,它能被程序访问到的最大范围。

在Javascript中,变量的作用有三种。

1.全局变量

全局变量在整个程序运行的范围内都可以访问。一般是在函数外部定义的变量。

简单说就是全局变量在任何地方都可以访问。

2.局部变量

局部变量只能限定在一个范围内被访问,超出这个范围就无法被访问。通常是在函数内部定义的变量

3.块级变量

块级变量只能在一个语句块中被访问。通常一个语句块指的就是在"{}"之间的语句,在这"{}"之间定义的变量,变只能在这个语句块中被访问。通常是由let定义的变量。

4.直观例子理解变量作用域

var abc;

{

var aaa;

let bbb;

{

let ccc;

bbb=111;//此时不会出错,一级块中定义的变量在二级块中是可发被访问的。

abc=333;//不会出错

}

ccc=222;//此时会出错,因为ccc这个变量只能在上面的大括号范围内访问,超出了就无法访问

}

aaa=0;//不会出错,任何地方都可以被访问

let 定义变量是ECMAScript6新增的,目的就是引入块级变量的概念。在我们后面的学习中,多可看具体情况用let 替代var定义。

var 定义变量带来的问题

1.变量提升

变量提升就是当函数或变量在定义前就被使用了,JS为了确保运行无误,就将其的定义在解释阶段提升到了程序顶部。

也即是未定义先使用,只不过其值是undefined

a=50;

var a;

console.log(a);//此时程序在运行时就发生了变量提升,也即是在给a赋值之时,在系统内部已经定义了一个a,相当于将var a提升到了最顶部,即提升到了a=50这句之前。

2.变量覆盖

var tmp = new Date();

function f() {

console.log(tmp);

if (false) {

var tmp = 'hello world';

}

}

f(); // 得到的结果是undefined

上面的例子,之所以会得到意外的结果,也是因为变量提升所至,然后内部定义的变量又把外面定义的变量给覆盖了。

let定义解决var的问题

let不允许变量或函数在定义变量前使用,所有变量都必须先定义后使用。

let不允许在同一作用域下重复定义同名变量。