1
0
mirror of https://github.com/ruanyf/es6tutorial.git synced 2025-05-24 10:22:23 +00:00

docs(module): 加入 import 命令的只读性 #595

This commit is contained in:
ruanyf 2018-01-28 09:24:08 +08:00
parent b2a2c581bb
commit cef2b36a82

View File

@ -6,7 +6,7 @@
在 ES6 之前,社区制定了一些模块加载方案,最主要的有 CommonJS 和 AMD 两种。前者用于服务器后者用于浏览器。ES6 在语言标准的层面上,实现了模块功能,而且实现得相当简单,完全可以取代 CommonJS 和 AMD 规范,成为浏览器和服务器通用的模块解决方案。
ES6 模块的设计思想是尽量的静态化使得编译时就能确定模块的依赖关系以及输入和输出的变量。CommonJS 和 AMD 模块都只能在运行时确定这些东西。比如CommonJS 模块就是对象,输入时必须查找对象属性。
ES6 模块的设计思想是尽量的静态化使得编译时就能确定模块的依赖关系以及输入和输出的变量。CommonJS 和 AMD 模块都只能在运行时确定这些东西。比如CommonJS 模块就是对象,输入时必须查找对象属性。
```javascript
// CommonJS模块
@ -205,6 +205,24 @@ function setName(element) {
import { lastName as surname } from './profile.js';
```
`import`命令输入的变量都是只读的,因为它的本质是输入接口。也就是说,不允许在加载模块的脚本里面,改写接口。
```javascript
import {a} from './xxx.js'
a = {}; // Syntax Error : 'a' is read-only;
```
上面代码中,脚本加载了变量`a`,对其重新赋值就会报错,因为`a`是一个只读的接口。但是,如果`a`是一个对象,改写`a`的属性是允许的。
```javascript
import {a} from './xxx.js'
a.foo = 'hello'; // 合法操作
```
上面代码中,`a`的属性可以成功改写,并且其他模块也可以读到改写后的值。不过,这种写法很难查错,建议凡是输入的变量,都当作完全只读,轻易不要改变它的属性。
`import`后面的`from`指定模块文件的位置,可以是相对路径,也可以是绝对路径,`.js`后缀可以省略。如果只是模块名,不带有路径,那么必须有配置文件,告诉 JavaScript 引擎该模块的位置。
```javascript