require和import有啥区别?

今天在研究react的lazyRequire时突然想到了这个问题,于是展开了一些列研究。。

要回答这个问题,必须从模块化说起。

所谓模块化主要就是解决代码分割、作用域隔离、模块之间的依赖管理。

通常一个文件就是一个模块,有自己的作用域,只向外暴露特定的变量和函数

流行的模块化规范有:CommonJS、AMD、CMD、ES6的模块系统。
这里简单介绍下CommonJS规范和ES6 Module。

1. CommonJS

使用module.exports定义当前模块对外输出的接口,用require加载模块。

2. ES6 Module

其模块功能主要由两个命令构成:export和import。
export用于规定模块的对外接口;import用于输入其他模块提供的功能。

3. 两者区别

CommonJS模块输出的是一个值的拷贝,ES6模块输出的是值的引用。

也就是说,在CommonJS模块中,一旦输出一个值,模块内部的变化就影响不到这个值;而ES6输出的是值的引用,export之后,内部对这个值进行修改,最终export的是修改过的值。

CommonJS模块是运行时加载,ES6模块是编译时加载。

两者各有用武之地:

扫描二维码关注公众号,回复: 6106574 查看本文章

4.参考

https://juejin.im/post/5aaa37c8f265da23945f365c
https://imweb.io/topic/582293894067ce9726778be9
https://www.cnblogs.com/cag2050/p/7419258.html
http://es6.ruanyifeng.com/#docs/module

猜你喜欢

转载自blog.csdn.net/colinandroid/article/details/89195401
今日推荐