let 与 const
ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: let
和 const
。
let 声明的变量只在 let
命令所在的代码块内有效。
const 声明一个只读的常量,一旦声明,常量的值就不能改变。
代码块内有效:
let 是在代码块内有效,var 是在全局范围内有效:
1 | { |
let 只能声明一次 var 可以声明多次:
1 | let a = 1; |
let 不存在变量提升,var 会变量提升:
1 | console.log(a); //ReferenceError: a is not defined |
解构赋值
在解构中,有下面两部分参与:
- 解构的源,解构赋值表达式的右边部分。
- 解构的目标,解构赋值表达式的左边部分。
数组模型的解构(Array)
1 | // 基本 |
字符串:
在数组的解构中,解构的目标若为可遍历对象,皆可进行解构赋值。可遍历对象即实现 Iterator 接口的数据。
1 | let [a, b, c, d, e] = 'hello'; |
解构默认值:
1 | let [a = 2] = [undefined]; // a = 2 |
当解构模式有匹配结果,且匹配结果是 undefined
时,会触发默认值作为返回结果。
1 | let [a = 3, b = a] = []; // a = 3, b = 3 |
a 与 b 匹配结果为 undefined ,触发默认值:a = 3; b = a =3
a 正常解构赋值,匹配结果:a = 1,b 匹配结果 undefined ,触发默认值:b = a =1
a 与 b 正常解构赋值,匹配结果:a = 1,b = 2
对象模型的解构(Object)
1 | // 基本 |
ES6 模块
参考:ES6 模块
ES6 的模块化分为导出(export
) @与导入(import
)两个模块。
ES6 的模块自动开启严格模式,不管你有没有在模块头部加上 use strict;
。
模块中可以导入和导出各种类型的变量,如函数,对象,字符串,数字,布尔值,类等。
每个模块都有自己的上下文,每一个模块内声明的变量都是局部变量,不会污染全局作用域。
每一个模块只加载一次(是单例的), 若再去加载同目录下同文件,直接从内存中读取。
基本用法
模块导入导出各种类型的变量,如字符串,数值,函数,类。
- 导出的函数声明与类声明必须要有名称(
export default
命令另外考虑)。 - 不仅能导出声明还能导出引用(例如函数)。
export
命令可以出现在模块的任何位置,但必需处于模块顶层。import
命令会提升到整个模块的头部,首先执行。
1 | /*-----export [test.js]-----*/ |
建议使用大括号指定所要输出的一组变量写在文档尾部,明确导出的接口。
函数与类都需要有对应的名称,导出文档尾部也避免了无对应名称。
as 的用法
export
命令导出的接口名称,须和模块内部的变量有一一对应关系。
导入的变量名,须和导出的接口名称相同,即顺序可以不一致。
不同模块导出接口名称命名重复, 使用 as 重新定义变量名。
import 命令的特点
只读属性:不允许在加载模块的脚本里面,改写接口的引用指向,即可以改写 import 变量类型为对象的属性值,不能改写 import 变量类型为基本类型的值。
1 | import {a} from "./xxx.js" |
单例模式:多次重复执行同一句 import
语句,那么只会执行一次,而不会执行多次。import
同一模块,声明不同接口引用,会声明对应变量,但只执行一次 import
。
1 | import { a } "./xxx.js"; |
静态执行特性:import
是静态执行,所以不能使用表达式和变量。
1 | import { "f" + "oo" } from "methods"; |
export default 命令
- 在一个文件或模块中,
export
、import
可以有多个,export default
仅有一个。 export default
中的default
是对应的导出接口变量。- 通过
export
方式导出,在导入时要加{ }
,export default
则不需要。 export default
向外暴露的成员,可以使用任意变量来接收。
1 | var a = "My name is Tom!"; |
复合使用
export
与 import
可以在同一模块使用,使用特点:
- 可以将导出接口改名,包括
default
。 - 复合使用
export
与import
,也可以导出全部,当前模块导出的接口会覆盖继承导出的。
1 | export { foo, bar } from "methods"; |