首页 web前端 js教程 详解export default与require和exports,export区别与联系

详解export default与require和exports,export区别与联系

Jun 22, 2017 am 11:53 AM
default export

还在为module.exports、exports、export和export default,import和require区别与联系发愁吗,这一篇基本就够了!

一、首先搞清楚一个基本问题:

module.exportsexports是属于CommonJS模块规范!(不清楚commonjs?大神请这边逛一逛commonjs规范)

exportexport default是属于ES6语法(不清楚ES6?大神请这边逛一逛ES6模块)

同样importrequire分别属于ES6和CommonJS!

二、知道属于哪一块的语法了还有一个明确点:

module.exportsexports、exportexport default都是导出模块;

importrequire则是导入模块。

所以现在就不要弄混了,module.exports导出对应require导入,export导出对应import导入。

喂!等等,怎么才说到module.exports导出对应require导入,export导出对应import导入,那还有exports和export default呢!?那我们继续。

三、module.exportsexports的区别与联系

讲到这里就不得不稍微提一下模块化:

Node应用由模块组成,采用CommonJS模块规范。

根据这个规范,每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。

CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,其实是加载该模块的module.exports属性。

var x = 5;var addX = function (value) {  return value + x;};module.exports.x = x;module.exports.addX = addX;
登录后复制

上面代码通过module.exports输出变量x和函数addX

require方法用于加载模块。

var example = require('./example.js');console.log(example.x); // 5console.log(example.addX(1)); // 6
登录后复制

看了刚刚这段commonjs规范上面的介绍可以知道以下区别与联系:

其实exports变量是指向module.exports,加载模块实际是加载该模块的module.exports。这等同在每个模块头部,有一行这样的命令。

var exports = module.exports;
登录后复制

于是我们可以直接在 exports 对象上添加方法,表示对外输出的接口,如同在module.exports上添加一样。注意,不能直接将exports变量指向一个值,因为这样等于切断了exports与module.exports的联系。

三、exportexport default的区别与联系

模块功能主要由:exportimport构成export导出模块的对外接口,import命令导入其他模块暴露的接口。

export其实和export default就是写法上面有点差别,一个是导出一个个单独接口,一个是默认导出一个整体接口。使用import命令的时候,用户需要知道所要加载的变量名或函数名,否则无法加载。这里就有一个简单写法不用去知道有哪些具体的暴露接口名,就用export default命令,为模块指定默认输出。

export可以这样写

<code class=" javascript"><span class="token comment">// testA.js<span class="token keyword">var f <span class="token operator">= <span class="token string">&#39;Miel&#39;<span class="token punctuation">;<span class="token keyword">var name <span class="token operator">= <span class="token string">&#39;Jack&#39;<span class="token punctuation">;<span class="token keyword">var data<span class="token operator">= <span class="token number">1988<span class="token punctuation">;

export <span class="token punctuation">{f<span class="token punctuation">, name<span class="token punctuation">, data<span class="token punctuation">}<span class="token punctuation">;<br/></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>
登录后复制

使用export命令定义了模块的对外接口以后,其他 JS 文件就可以通过import命令加载这个模块。

<code class=" javascript"><span class="token comment">// main.js
import <span class="token punctuation">{</span></span></code><code class=" javascript"><span class="token comment"><span class="token keyword"><span class="token operator"><span class="token string"><span class="token punctuation"><span class="token keyword"><span class="token operator"><span class="token string"><span class="token punctuation"><span class="token keyword"><span class="token operator"><span class="token number"><span class="token punctuation"><span class="token punctuation">f<span class="token punctuation">, name<span class="token punctuation">, data</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code><code class=" javascript"><span class="token comment"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation">} from <span class="token string">&#39;./testA&#39;<span class="token punctuation">;<br/></span></span></span></span></span></span></span></code>
登录后复制

export default可以这样写

<code class=" javascript"><span class="token comment">// export-default.js
export default <span class="token keyword">function <span class="token punctuation">(<span class="token punctuation">) <span class="token punctuation">{
  console<span class="token punctuation">.<span class="token function">log<span class="token punctuation">(<span class="token string">&#39;foo&#39;<span class="token punctuation">)<span class="token punctuation">;<span class="token punctuation">}<br/></span></span></span></span></span></span></span></span></span></span></span></span></code>
登录后复制
// 或者写成function foo() {
  console.log(&#39;foo&#39;);}
export default foo;
登录后复制
<code class=" javascript"><span class="token comment">// import-default.js
import customName from <span class="token string">&#39;./export-default&#39;<span class="token punctuation">;<span class="token function">customName<span class="token punctuation">(<span class="token punctuation">)<span class="token punctuation">;<span class="token comment"> // &#39;foo&#39;<br/><br/></span></span></span></span></span></span></span></span></code>
登录后复制

下面比较一下export default和export 输出。

可以看到第一组是使用,语句不需要使用大括号;第二组使用,对应的语句需要使用大括号,一个模块只能有一个默认输出,所以只能使用一次。

<strong>四、import和require</strong><strong>的区别与联系</strong>

看了上面其实已经清楚了,import和require是分别属于ES6和CommonJS的两种导入模块的语法而已。

以上是详解export default与require和exports,export区别与联系的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Vue Cli中出现'The requested module does not provide an export named' Error – 怎么解决? Vue Cli中出现'The requested module does not provide an export named' Error – 怎么解决? Aug 20, 2023 pm 07:25 PM

VueCli中出现'Therequestedmoduledoesnotprovideanexportnamed'Error–怎么解决?在Vue项目的开发过程中,我们可能会遇到'Therequestedmoduledoesnotprovideanexportnamed'的错误提示。这个错误提示一般会出现在引入第三方组件时

default gateway怎么配置 default gateway怎么配置 Dec 07, 2023 am 11:34 AM

配置default gateway的步骤:1、确定路由器的IP地址;2、打开计算机的网络配置界面;3、配置网络连接;4、配置IPv4设置;5、输入IP地址和子网掩码;6、配置默认网关;7、配置DNS服务器;8、保存设置。详细介绍:1、确定路由器的IP地址,默认网关的地址通常是路由器的IP地址,在路由器的背面或用户手册中,可以找到路由器的IP地址;2、打开计算机的网络配置等等。

配置default gateway 配置default gateway Dec 07, 2023 pm 03:02 PM

配置default gateway的步骤:1、打开控制面板;2、选择网络和Internet;3、配置网络连接;4、配置IP地址;5、配置DNS服务器地址;6、确认配置;7、重启网络设备。详细介绍:1、打开控制面板,在Windows系统中,点击开始菜单,选择“控制面板”;2、选择网络和Internet,在控制面板中,选择“网络和Internet”;3、配置网络连接等等。

export和export default的区别 export和export default的区别 Oct 12, 2023 am 10:24 AM

export和export default的区别是export关键字用于导出一个或多个变量、函数或类,而export default关键字用于导出一个默认的变量、函数或类。在其他模块中,可以使用import关键字来导入这些导出的变量、函数或类。

怎么配置default gateway 怎么配置default gateway Dec 07, 2023 pm 02:56 PM

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。配置default gateway是网络设置中的重要步骤,它决定了主机通过哪个路由器访问互联网。

深入解析PHP的default用法:为你揭开其奥秘 深入解析PHP的default用法:为你揭开其奥秘 Mar 23, 2024 am 08:06 AM

PHP是一种广泛应用于Web开发领域的脚本语言,其灵活性和强大的功能让开发者们受益良多。在PHP中,默认值的设置是一个常见的操作,而其中的default关键字便扮演着至关重要的角色。本文将深入解析PHP中default的用法,为你揭开其奥秘,并结合具体的代码示例来帮助读者更好地理解。1.默认参数值在PHP中,我们可以为函数的参数设置默认值,以防止调用函数时

Java关键字中是否包含"default"? Java关键字中是否包含"default"? Apr 23, 2023 pm 01:13 PM

default是java关键字吗:答:default是java8中的关键字,也叫做“virtualextensionmethods”。中文翻译叫做“虚拟扩展方法”在接口里面包含了一些默认的使用方法。在接口进行扩展的时候,不会去和接口相关的实现类代码产生冲突。default和java相关介绍:1、在此之前的接口是个双刃剑,能够面向抽象但是不面向具体编程。2、这个的缺点是需要修改接口的时候,要先修改全部实现接口的类。3、在不能给接口添加新方法的时候不会影响已有的显示,因此加入了默认的方法,为大家解决

MySQL约束之默认约束default与零填充约束zerofill怎么实现 MySQL约束之默认约束default与零填充约束zerofill怎么实现 May 31, 2023 pm 05:10 PM

默认约束MySQL默认值约束用来指定某列的默认值。添加默认约束方式1:default;方式2:altertable表名modify列名类型default默认值;createtablet_user10(idint,namevarchar(20),addressvarchar(20)default‘北京'--指定默认约束);--altertable表名modify列名类型default默认值;createtablet_user11(idint,namevarchar(20),addr

See all articles