export和export default的区别以及require和import的区别

export和export default的区别以及require和import的区别

export和export default的区别以及require和import的区别

近期在准备复习一些概念以及知识,看了一些文档以及其他资源,这边做一下记录,为日后复习。
export与export default区别与用法参考原文地址:https://blog.csdn.net/Deft_MKJing/article/details/80388770
mdn地址https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/export
require与import区别与用法参考原文地址:https://zhuanlan.zhihu.com/p/121770261
import MDN地址https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/import

export和export default的用法与区别

  1. 在创建JavaScript模块时,export 语句用于从模块中导出实时绑定的函数、对象或原始值,以便其他程序可以通过 import 语句使用它们。被导出的绑定值依然可以在本地进行修改。在使用import进行导入时,这些绑定值只能被导入模块所读取,但在export导出模块中对这些绑定值进行修改,所修改的值也会实时地更新。无论您是否声明,导出的模块都处于严格模式。 export语句不能用在嵌入式脚本中。

  2. 有两种不同的导出方式,命名导出 export和默认导出 export defaul。你能够在每一个模块中定义多个命名导出,但是只允许有一个默认导出

  3. export导出可通过{}输出多个值,import导入时通过解构赋值按需取用需要用的模块。export default只能输出1个值,import导入时不需要{}

// 导出单个特性
export let name1, name2,, nameN; // also var, const
export let name1 =, name2 =,, nameN; // also var, const
export function FunctionName(){...}
export class ClassName {...}

// 导出列表
export { name1, name2,, nameN };

// 重命名导出
export { variable1 as name1, variable2 as name2,, nameN };

// 解构导出并重命名
export const { name1, name2: bar } = o;

// 默认导出
export default expression;
export default function () {} // also class, function*
export default function name1() {} // also class, function*
export { name1 as default,};

// 导出模块合集
export * from; // does not set the default export
export * as name1 from; // Draft ECMAScript® 2O21
export { name1, name2,, nameN } from;
export { import1 as name1, import2 as name2,, nameN } from;
export { default } from;
  1. 在导出多个值时,命名导出非常有用。在导入期间,必须使用相应对象的相同名称。但是,可以使用任何名称导入默认导出,例如:
let k; export default k = 12; 
// 另一个文件
import m from './test'; // 由于 k 是默认导出,所以可以自由使用 import m 替代 import k
console.log(m);        // 输出为 12 

着重注意以下几点:

  • 在你的 HTML 中需要包含 type=“module” 的 <script 元素这样的脚本,以便它被识别为模块并正确处理(在浏览器中,import 语句只能在声明了 type=“module” 的 script 的标签中使用。)
  • 不能通过 file:// URL 运行 JS 模块 — 这将导致 CORS 错误。你需要通过 HTTP 服务器运行。

import与require的用法与区别

  • 标题产生时间与背景不同

事件时间
importex6标准诞生2015
requirenode commonJs标准2009
  • 标题不同端(客户端/服务器)使用限制不同

CommonJs模块化方案require/exports是为服务器端开发设计的。服务器模块系统同步读取模块内容,编译执行后得到模块接口。
在浏览器端commonJs因其异步加载特性无法使用,直到2015年es6的出现浏览器端才终于有了自己的模块化方案(import/export)

  • require是动态加载,import是静态编译

CommonJS 加载的是一个对象(即 module.exports 属性),该对象只有在脚本运行完才会生成。而 ES6 模块不是对象,它的对外接口只是一种静态定义,在代码静态解析阶段就会生成。- 阮一峰

  • require是输出的值的拷贝,import是输出的值的引用

  • import可以在引用语句前使用模块,require必须在引用语句后使用模块

  • import只能在模块顶层使用,不能再函数判断语句等代码块中使用,require可以再代码块函数中使用

  • import默认开启严格模式,require默认不使用严格模式,用户自定义是否使用严格模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值