mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2025-05-24 18:32:22 +00:00
docs(module): 加入 import 命令的只读性 #595
This commit is contained in:
parent
b2a2c581bb
commit
cef2b36a82
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user