今天的面试觉得前面回答的还挺好的,到了import与require这里有些懵逼,老实说在使用的时候是真的没有考虑过这么多,一懵逼就乱说,可以说如果今天挂掉了,就是这里垮掉了。
首先问了我,import与require都是什么加载方式?
什么东西?这什么玩意?加载方式,我就 记得把他import进去和require进去就好了啊。
然后,面试官看我一脸懵逼就问我说,那这两个都是怎么引入的?
我说就import和require一下。。。
面试官说:那在哪里引入呢?
我说:在页面最上方,嗯,script标签的最上方。
他说,那你说,他们是什么加载方式?
我:。。。。
整个过程其实复杂又曲折,感觉面试官是真的在很有耐心的在引导我回答,可是,真是全是我没有听过的名词,我真的不知道。
然后回答的都是错的,感觉我面试要挂了。哎!!!
好了,日记就不写了。现在好好看看这他妈的究竟是什么:
| 加载方式 | 规范 | 命令 | 特点 |
|---|---|---|---|
| 运行时加载 | CommonJS/AMD | require | 社区方案,提供了服务器/浏览器的模块加载方案。非语言层面的标准。只能在运行时确定模块的依赖关系及输入/输出的变量,无法进行静态优化。 |
| 编译时加载 | ESMAScript6+ | import | 语言规格层面支持模块功能。支持编译时静态分析,便于JS引入宏和类型检验。动态绑定。 |
那么问题来了 ,他们究竟是怎样的引入过程,这样就很容易理解了
以下是我的个人理解,今天面试完,面试官问我你还有什么想问的时候,其实我是想要问这个的,那个我怕他觉得我没救了就问了其他的问题:(如果是错误的,后期会修改的):
import是页面的最上方的加载,是一种静态的加载,那么他会把父级的模块引入到该文件中,像是src的样子,而require是时一种动态的加载,他是在使用的时候在去请求引入的资源,他是动态的,像是href的样子,是作为一种中间的链接,并不写入文件中。
关于import和require的来源相信大家都很清晰,require是commonJS规范的语法,而nodeJS是基于commonJS的,所以在node中使用的是require。ES6是生于node之后,在ES6中import和export是一对的。
在有的后期框架中,require和import是可以混合用的。
至于如何使用,看:
他说的真的很清晰。
秋招真的很累,现在手上有一个offer,可是真的不想去。并非自持清高而是我觉得我并不差。
本文详细对比了JavaScript中import与require两种模块加载方式的特点与应用场景。import属于ES6标准,支持静态分析;require遵循CommonJS规范,适用于运行时加载。
846





