注意,模块整体加载所在的那个对象(上例是circle),应该是可以静态分析的,所以不允许运行时改变 。
import * as circle from './circle';// 下面两行都是不允许的circle.foo = 'hello';circle.area = function () {};6.export default
之前的例子中,使用import导入时,都需要知道模块中所要加载的变量名或函数名,用户可能不想阅读源码,只想直接使用接口,就可以用export default命令,为模块指定输出
// export-default.jsexport default function () { console.log('foo');}其他模块加载该模块时,import命令可以为该匿名函数指定任意名字 。
// import-default.jsimport customName from './export-default';customName(); // 'foo'export default也可以用于非匿名函数前 。
下面比较一下默认输出和正常输出 。
// 第一组export default function crc32() { // 输出 // ...}import crc32 from 'crc32'; // 输入// 第二组export function crc32() { // 输出 // ...};import {crc32} from 'crc32'; // 输入可以看出,使用export default时,import语句不用使用大括号 。
*******import和export命令只能在模块的顶层,不能在代码块之中 。否则会语法报错 。
这样的设计,可以提高编译器效率,但是没有办法实现运行时加载 。
因为require是运行时加载,所以import命令没有办法代替require的动态加载功能 。
所以引入了import()函数 。完成动态加载 。
import(specifier)specifier用来指定所要加载的模块的位置 。import能接受什么参数,import()可以接受同样的参数 。
import()返回一个Promise对象 。
const main = document.querySelector('main');import(`./section-modules/${someVariable}.js`) .then(module => { module.loadPageInto(main); }) .catch(err => { main.textContent = err.message; });7.import()函数适用场合
1)按需加载:
button.addEventListener('click', event => { import('./dialogBox.js') .then(dialogBox => { dialogBox.open(); }) .catch(error => { /* Error handling */ })});above: import模块在事件监听函数中,只有用户点击了按钮,才会加载这个模块 。
2)条件加载:
import()可以放在if...else语句中,实现条件加载 。
if (condition) { import('moduleA').then(...);} else { import('moduleB').then(...);}
推荐阅读
- PS中的通道初步认识
- 修丽可和菲洛嘉哪个好 丽珠兰好还是菲洛嘉好
- 拼多多曝光量和排名的提升技巧
- 使用python构建递归算法,实现查找电脑中的所有文件
- 梦到和异性有暧昧关系 梦见和认识的异性暧昧是什么意思
- 淘宝直播都有哪些类目 淘宝直播和淘宝店铺有什么区别
- 白茶和普洱茶 存储方式样吗
- 各国老外眼中的中国美女 华裔女神asia_fox
- 味精和鸡精的区别在哪里 味精和鸡精的区别
- 驾驶时开窗和开空调哪个更省油?
