前端面试:import 和 require 区别

1、遵循的规范不同

require 是AMD规范引入方式

import 是es6的一个语法标准,兼容浏览器要转换成es5

 

2、调用时间

require是运行时调用,require是个函数所以require理论上可以运用在代码的任何地方

import是编译时调用,所以必须放在文件开头 且放在全局中引入

3、本质

require是赋值过程,其实require的结果就是对象、数字、字符串、函数等,再把require的结果赋值给某个变量
import是解构过程,但是目前所有的引擎都还没有实现import,我们在node中使用babel支持ES6,也仅仅是将ES6转码为ES5再执行,import语法会被转码为require
 

4、所属语法规范不同

import(es6语法)

import在编译时确定导入
路径只能是字符串常量
import会被提升到文件最顶部
导入的变量是只读的

import导入的是值引用,而不是值拷贝
模块内部值发生变化,会对应影响到引用的地方
import导入与导出需要有一一映射关系,类似解构赋值。

require(CommandJS规范)

它相当于module.exports的传送门,module.exports后面的内容是什么,require的结果就是什么,对象、数字、字符串、函数……再把require的结果赋值给某个变量,相当于把require和module.exports进行平行空间的位置重叠。
require理论上可以运用在代码的任何地方,甚至不需要赋值给某个变量之后再使用。
require(’./a’)(); // a模块是一个函数,立即执行a模块函数
var data = require(’./a’).data; // a模块导出的是一个对象
require()的路径可以是表达式:require(’/app’ + ‘/index’);
require导出的是 module.exports对象
exports是对module.exports的一个引用,当module.exports指向变化,exports导出就会出问题了
require返回对应module.exports对象的浅拷贝
如果是module.exports里的基本类型的值,会得到该值的副本
如果是module.exports里的对象类型的值,会得到该值的引用
 

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值