变量是用来存储数据的容器,在JavaScript中变量是松散类型,松散类型的变量可以用来保存任意类型的数据。在ECMAScript6之前JavaScript变量只能使用var和function来声明,在后来的ECMAScript6中又添加了let、const、import、Class这几种。不同的声明方式作用域等都不同。所谓作用域就是指变量的有效范围,比如只在某个方法内有效,出了这个方法变量声明就无效被销毁了。

var:
实现方式:

var a;
 var b = 0;


对于var a;这种声明方式,如果我们打印a:console.log(a)得到的结果是undefined,因为它是没有初始值的。而var b = 0;这样的声明 会给b变量赋值一个初始值:0,如果在var b = 0;这句语句之后打印b得到的就是初始值0。注:如果你在var b = 0;这句语句之前打印b结果就会不一样,这涉及到JavaScript的执行顺序和变量的提升,这块后面再讲。

function:
function用于函数声明,就是我们经常说的方法的声明。
实现方式:

function fn() = {};

function声明也会涉及到函数提升,并且函数提升优先于变量提升。

let:
let声明类似于var声明,但是与var声明有一个大的不同点:let声明的变量只在let所在的代码快内有效。
所说的代码块其实就是作用域,在ECMAScript6之前只存在函数作用域与全局作用域,ECMAScript6添加了块级作用域,用{}来表示。如果如下用let声明变量

a:
 {
 let a; 
 }


a就只在{}内有效,出了{}就无效了。并且let声明不存在变量提升,基于let的这些特点,let声明比较适用于for循环。
let不允许在同一个作用域内重复声明同一个变量,否则报错。而var声明却无此影响,var可以在用一个作用域内对同一个变量重复声明。

const:
const声明一个只读的常量,一旦声明,常量的值就不能改变,和Java中的final类似。并且不同于var等声明,const在声明的同时必须立即初始化。
实现方式:
const API;
const声明之后不允许改变变量的值,与let一样也不允许重复声明,也不存在变量提升。

import:
import的作用是将某个模块中导出的函数、对象或初始值移入到另一个模块中的语法。
实现方式:
import {模块名称} from “需要导入模块”

Class:
class的概念是ES6中引入的,可以通过class来创建对象。
实现方式:

class Person{
 constructor(name){
 this.name = name;
 }
 }

对于class我们暂时先做了解,后面还会继续深入学习。