import和require的本质区别

  目录

简单的说一下import和require的本质区别

import和require的本质区别

import是ES6的模块规范,require是commonjs的模块规范,详细的用法我不介绍,我只想说一下他们最基本的区别,import是静态加载模块,require是动态加载,那么静态加载和动态加载的区别是什么呢?
静态加载时代码在编译的时候已经执行了,动态加载是编译后在代码运行的时候再执行,那么具体点是什么呢?
先说说import,如下代码

1
2
3
4
5
6
// main.js文件
import { name } from 'name.js'

// name.js文件
export let name = 'jinux'
export let age = 20

上面的代码表示main.js文件里引入了name.js文件导出的变量,在代码编译阶段执行后的代码如下:

1
2
// main.js文件
let name = 'jinux'

这个是我自己理解的,其实就是直接把name.js里的代码放到了main.js文件里,好比是在main.js文件中声明一样。
再来看看require

1
2
3
4
5
6
7
8
9
// main.js文件
var obj = require('obj.js');

// obj.js文件
var obj = {
name: 'jinux',
age: 20
}
module.export obj;

require是在运行阶段,需要把obj对象整个加载进内存,之后用到哪个变量就用哪个,这里再对比一下import,import是静态加载,如果只引入了name,age是不会引入的,所以是按需引入,性能更高。