coderwhy课程笔记(7)

coderwhy课程笔记(7)

浏览器的前端模块化:Es Module. (1. 浏览器本身支持es module, 2. 使用webpack, 将源码进行解析和打包,转成普通浏览器可以识别的js代码)

导出的几种方式:1. export { name } ; 2. export { name as fname}; 3. export const name = "fname" ;

导入的几种方式:1. import { name } from "./foo.js"; 2. import { name as fname } from "./foo.js" ; 3. import * as foo from "./foo.js"

import 和 export的结合使用:export { formatCount, formatDate } from './format.js' => 优化:export * from './format.js'

default用法:默认导出,导出的时候不用指定名字,导入的时候不需要{}, 并且可以自己指定名字。

1. 
function test () {
    xxxx
}
export default test

2. (一个模块只能有一个默认导出)
export default function () {
    xxxx
} 

import函数:

普通的导入,必须放在模块顶层,不能放到逻辑代码块里。import函数没有这个限制。

let flag = true
if (flag) {
    import { name, age, sayHello } from './foo.js' //会报错,只能用import函数
    const importPromise = import("./foo.js") //异步非阻塞
    importPromise.then(res => {
        console.log(res.name, res.age)
    })
}   

import时,from后面的字符串不能动态生成、拼接,即不能等到执行的时候才知道。

import.meta 是一个给JS模块暴露特定上下文的元数据属性的对象。

ES Module的解析原理:

ES modules: A cartoon deep-dive – Mozilla Hacks – the Web developer blog

模块环境记录,指的是记录每个模块的导出变量列表的内存结构。在阶段二分配地址,在阶段三填充值。

发表回复

*您的电子邮件地址不会被公开。必填项已标记为 。

*
*