山地人

课04.变量

山地人
山地人
2021-05-13

用var声明一个变量

var name = "张三";
  1. 使用var关键词,声明一个name变量。
  2. name变量赋值张三

其他变量声明方法

let name = "李四";
const pi = 3.14;

除了用var声明变量,我们还可以用letconst来声明变量。这两种变量的声明方法,是在es6中出现的。目的是为了解决var声明的变量缺乏块级作用域的问题。

var,let和const的区别

  1. 在同一个作用域里,比如一个函数内部可以多次用var声明同一个变量,而letconst对同一个变量在相同作用域里多次声明会报错。

你可以把下面的var都换成let或者const试试,看是否报错。

  1. 刚才提到了作用域
关键词作用域说明
var函数级作用域只区分函数内和函数外的作用域
let块级作用域区分函数和语句块
const块级作用域区分函数和语句块

下面我们先通过一个例子,搞明白什么是函数作用域

  • 第一行的user是定义在全局作用域下,所以在第二行输出的user是第一行的张三
  • 执行第7行的hello()函数时,函数hello被执行,hello内部的4-5行代码,var定义的变量是函数级别作用域,所以能否区分出,第5行打印的是函数内部的user,所以输出了李四
  • 第8行代码执行时,已经出了hello函数,所以这里输出的user是全局环境,也就是第一行的张三

对于letconst则是使用的比var更细颗粒的块级作用域。块级作用域,除了能够区分函数内外还能够区分不同的代码块

什么是代码块,我们写的 if(...) {} 后面的那对{}就是一个代码块。

下面这个例子,我们看下letconst的块级作用域。

  • 每一层{}就是一层代码块,在打印变量user时,javascript引擎会查找最贴近打印语句的这一层代码块里的user
  • 外层的代码块无法访问到内层代码块中的变量,但内层的代码可以访问外层的变量。

你可以把上面的let换成var后,看看var对块级作用域是否起效。

变量类型

javascript中有7中类型的变量

类型名称说明
Number数字类型
Boolean布尔类型
String字符串类型
Object对象类型
BigInt任意精度整数类型
Null空值类型
Undefined未定义类型
Symbol符号类型

下面我们用typeof对每种类型的变量进行测试。

小结

学完本篇互动教程,如果你觉得体验不错,可以把网页链接发送给你的小伙伴,让他/她也来感受一下。当然,你也可以继续看看网站上其他的的互动教程,希望`idev365`能够给你带来收获。

学习教程的过程中碰到了问题,或者对idev365有什么改进意见和想法,欢迎加入idev365微信内测群,和山地人交流你的想法。