面试:require 和 import 的区别?

CommonJS和ES6模块有什么区别?

requireimport 在日常的开发过程中是经常使用的已经模块引入的方式,但是这两者的区别有很多人还是没搞明白,通常在一个项目中,我们基本上不用去关系这些,直接去使用,但是这两种方式的区别是什么呢?接下来看下面的代码…

commonjs的用法
1.首先创建一个index.js的文件

// lib.js
let counter = 3;
const incCounter = ()=>{
  counter++
}

module.exports = {
  counter,
  incCounter
}

2.再次创建一个main.js,使用commonjs的方式导入

// main.js
var index= require('./index');
console.log(index)
console.log(index.counter);  // 3
index.incCounter();
console.log(index.counter); // 3

结果分析: 在mian.js文件中更改变量的值,通过 require 引入 index的变量,拿到的值始终是初始化的值,相当于值的绑定。
esmodule的用法

//index.js
export let counter = 3;
export function incCounter () {
  counter++;
}
// main.js
import { counter, incCounter } from './index.js'

console.log(counter);  //3 
incCounter()
console.log(counter)  //4 

结果分析:通过 import 引入 counter的变量,在源文件中修改变量的值后,引入拿到的变量值也会改变,相当于引用。

总结

1、导入require 导出 exports/module.exports 是 CommonJS 的标准,通常适用范围如 Node.js。
2、import/export 是 ES6 的标准,通常适用范围如 Vue、React。
3、commonjs 输出的是一个值的拷贝,而es6输出的是值的引用。
4、 import 是引用,所以你修改 import 的值也会影响,而import 导入的名字则是按 const 的规则来处理的,import() 是支持动态加载的。
5、 require 相当于值的绑定,无法修改源文件的基本数据类型,所以基本类型的值 与 原始文件无关, 但引用类型会影响,引用类型相当于浅拷贝。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值