这些 ECMAScript 模块知识,都是我需要知道的,已有千人收藏

61 阅读4分钟

最后


大厂面试问深度,小厂面试问广度,如果有同学想进大厂深造一定要有一个方向精通的惊艳到面试官,还要平时遇到问题后思考一下问题的本质,找方法解决是一个方面,看到问题本质是另一个方面。还有大家一定要有目标,我在很久之前就想着以后一定要去大厂,然后默默努力,每天看一些大佬们的文章,总是觉得只有再学深入一点才有机会,所以才有恒心一直学下去。

开源分享:docs.qq.com/doc/DSmRnRG…

浏览器中的 ES 模块


现代浏览器支持ES模块,但有一些警告。 要使用模块,需要在 script 标签上添加属性 type, 对应值 为 module

ECMAScript modules in the browser

The result is:

myModule.js 内容如下:

export function appendResult(element) {

const result = Math.random();

element.innerText += result;

}

大家都说简历没项目写,我就帮大家找了一个项目,还附赠【搭建教程】

动态导入


ES 模块是静态的,这意味着我们不能在运行时更改导入。随着2020年推出的动态导入(dynamic imports),我们可以动态加载代码来响应用户交互(webpack早在ECMAScript 2020推出这个特性之前就提供了动态导入)。

考虑下面的代码:

Dynamic imports

Load!

再考虑一个带有两个导出的JavaScript模块

// util.js

export function funcA() {

console.log("Hello named export!");

}

export default function funcB() {

console.log("Hello default export!");

}

为了动态导入 util.js 模块,我们可以点击按钮在去导入:

/ loader.js

const btn = document.getElementById("btn");

btn.addEventListener("click", () => {

// loads named export

import("./util.js").then(({ funcA }) => {

funcA();

});

});

这里使用解构的方式,取出**命名导出 ** funcA 方法:

({ funcA }) => {}

ES模块实际上是JavaScript对象:我们可以解构它们的属性以及调用它们的任何公开方法。

要使用动态导入的默认方法,可以这样做

// loader.js

const btn = document.getElementById("btn");

btn.addEventListener("click", () => {

import("./util.js").then((module) => {

module.default();

});

});

当作为一个整体导入一个模块时,我们可以使用它的所有导出

// loader.js

const btn = document.getElementById("btn");

btn.addEventListener("click", () => {

// loads entire module

// uses everything

import("./util.js").then((module) => {

module.funcA();

module.default();

});

});

还有另一种用于动态导入的常见样式,如下所示:

const loadUtil = () => import("./util.js");

const btn = document.getElementById("btn");

btn.addEventListener("click", () => {

//

});

loadUtil返回的是一个 promise,所以我们可以这样操作

const loadUtil = () => import("./util.js");

const btn = document.getElementById("btn");

btn.addEventListener("click", () => {

loadUtil().then(module => {

module.funcA();

module.default();

})

})

动态导入看起来不错,但是它们有什么用呢?

使用动态导入,我们可以拆分代码,并只在适当的时候加载重要的代码。在 JavaScript 引入动态导入之前,这种模式是webpack(模块绑定器)独有的。

ReactVue通过动态导入代码拆分来加载响应事件的代码块,比如用户交互或路由更改。

动态导入JSON文件


假设我们项目有一个 person.json 文件,内容如下:

{

"name": "Jules",

"age": 43

}

现在,我们需要动态导入该文件以响应某些用户交互。

因为 JSON 文件不是一个方法,所以我们可以使用默认导出方式:

const loadPerson = () => import('./person.json');

const btn = document.getElementById("btn");

btn.addEventListener("click", () => {

loadPerson().then(module => {

const { name, age } = module.default;

console.log(name, age);

});

});

这里我们使用解构的方式取出 nameage :

const { name, age } = module.default;

动态导入与 async/await


因为 import() 语句返回是一个 Promise,所以我们可以使用 async/await:

const loadUtil = () => import("./util.js");

const btn = document.getElementById("btn");

btn.addEventListener("click", async () => {

const utilsModule = await loadUtil();

utilsModule.funcA();

utilsModule.default();

})

动态导入的名字


使用import()导入模块时,可以按照自己的意愿命名它,但要调用的方法名保持一致:

import("./util.js").then((module) => {

module.funcA();

module.default();

});

或者:

import("./util.js").then((utilModule) => {

utilModule.funcA();

utilModule.default();

});

跳槽是每个人的职业生涯中都要经历的过程,不论你是搜索到的这篇文章还是无意中浏览到的这篇文章,希望你没有白白浪费停留在这里的时间,能给你接下来或者以后的笔试面试带来一些帮助。

也许是互联网未来10年中最好的一年。WINTER IS COMING。但是如果你不真正的自己去尝试尝试,你永远不知道市面上的行情如何。这次找工作下来,我自身感觉市场并没有那么可怕,也拿到了几个大厂的offer。在此进行一个总结,给自己,也希望能帮助到需要的同学。

面试准备

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

面试准备根据每个人掌握的知识不同,准备的时间也不一样。现在对于前端岗位,以前也许不是很重视算法这块,但是现在很多公司也都会考。建议大家平时有空的时候多刷刷leetcode。算法的准备时间比较长,是一个长期的过程。需要在掌握了大部分前端基础知识的情况下,再有针对性的去复习算法。面试的时候算法能做出来肯定加分,但做不出来也不会一票否决,面试官也会给你提供一些思路。