模块定义文件导出类_浓缩的就是精华——ES6模块精炼讲解

1e0689d93bf8dff6765fbb6958aa97f2.png

概述

在 ES6 前, 实现模块化使用的是 RequireJS 或者 seaJS(分别是基于 AMD 规范的模块化库, 和基于 CMD 规范的模块化库)。

ES6 引入了模块化,其设计思想是在编译时就能确定模块的依赖关系,以及输入和输出的变量。

ES6 的模块化分为导出(export) @与导入(import)两个模块。

特点

ES6 的模块自动开启严格模式,不管你有没有在模块头部加上 use strict;

模块中可以导入和导出各种类型的变量,如函数,对象,字符串,数字,布尔值,类等。

每个模块都有自己的上下文,每一个模块内声明的变量都是局部变量,不会污染全局作用域。

每一个模块只加载一次(是单例的), 若再去加载同目录下同文件,直接从内存中读取。

export 与 import

基本用法

模块导入导出各种类型的变量,如字符串,数值,函数,类。

  • 导出的函数声明与类声明必须要有名称(export default 命令另外考虑)。
  • 不仅能导出声明还能导出引用(例如函数)。
  • export 命令可以出现在模块的任何位置,但必须处于模块顶层。
  • import 命令会提升到整个模块的头部,首先执行。
/*-----export [test.js]-----*/let myName = "Tom";let myAge = 20;let myfn = function(){    return "My name is" + myName + "! I'm '" + myAge + "years old."}let myClass =  class myClass {    static a = "yeah!";}export { myName, myAge, myfn, myClass } /*-----import [xxx.js]-----*/import { myName, myAge, myfn, myClass } from "./test.js";console.log(myfn());// My name is Tom! I'm 20 years old.console.log(myAge);// 20console.log(myName);// Tomconsole.log(myClass.a );// yeah!

建议使用大括号指定所要输出的一组变量写在文档尾部,明确导出的接口。

函数与类都需要有对应的名称,导出文档尾部也避免了无对应名称。

as 的用法

export 命令导出的接口名称,须和模块内部的变量有一一对应关系。

导入的变量名,须和导出的接口名称相同,即顺序可以不一致。

/*-----export [test.js]-----*/let myName = "Tom";export { myName as exportName } /*-----import [xxx.js]-----*/import { exportName } from "./test.js";console.log(exportName);// Tom使用 as 重新定义导出的接口名称,隐藏模块内部的变量/*-----export [test1.js]-----*/let myName = "Tom";export { myName }/*-----export [test2.js]-----*/let myName = "Jerry";export { myName }/*-----import [xxx.js]-----*/import { myName as name1 } from "./test1.js";import { myName as name2 } from "./test2.js";console.log(name1);// Tomconsole.log(name2);// Jerry

不同模块导出接口名称命名重复, 使用 as 重新定义变量名。

import 命令的特点

只读属性:不允许在加载模块的脚本里面,改写接口的引用指向,即可以改写 import 变量类型为对象的属性值,不能改写 import 变量类型为基本类型的值。

import {a} from "./xxx.js"a = {}; // error import {a} from "./xxx.js"a.foo = "hello"; // a = { foo : 'hello' }

单例模式:多次重复执行同一句 import 语句,那么只会执行一次,而不会执行多次。import 同一模块,声明不同接口引用,会声明对应变量,但只执行一次 import 。

import { a } "./xxx.js";import { a } "./xxx.js";// 相当于 import { a } "./xxx.js"; import { a } from "./xxx.js";import { b } from "./xxx.js";// 相当于 import { a, b } from "./xxx.js";

静态执行特性:import 是静态执行,所以不能使用表达式和变量。

import { "f" + "oo" } from "methods";// errorlet module = "methods";import { foo } from module;// errorif (true) {  import { foo } from "method1";} else {  import { foo } from "method2";}// error

export default 命令

  • 在一个文件或模块中,export、import 可以有多个,export default 仅有一个。
  • export default 中的 default 是对应的导出接口变量。
  • 通过 export 方式导出,在导入时要加{ },export default 则不需要。
  • export default 向外暴露的成员,可以使用任意变量来接收。
var a = "My name is Tom!";export default a; // 仅有一个export default var c = "error"; // error,default 已经是对应的导出变量,不能跟着变量声明语句 import b from "./xxx.js"; // 不需要加{}, 使用任意变量接收

复合使用

export 与 import 可以在同一模块使用,使用特点:

  • 可以将导出接口改名,包括 default。
  • 复合使用 export 与 import ,也可以导出全部,当前模块导出的接口会覆盖继承导出的。
export { foo, bar } from "methods"; // 约等于下面两段语句,不过上面导入导出方式该模块没有导入 foo 与 barimport { foo, bar } from "methods";export { foo, bar }; /* ------- 特点 1 --------*/// 普通改名export { foo as bar } from "methods";// 将 foo 转导成 defaultexport { foo as default } from "methods";// 将 default 转导成 fooexport { default as foo } from "methods"; /* ------- 特点 2 --------*/export * from "methods";
92ffed0ef8e5fe3086a044556c99cee2.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276613.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于快速开发和设计应用系统的一些个人的意见

作为程序员,经常会为我们的客户去开发和设计各种应用系统,比如OA /CRM/物流调度/客户服务/电子政务。。。及各种管理信息系统,我们经常会去开发和实现这样的一些系统,每周、每月、每年经常都要去做这样的一些开发工作,…

Jquery1.6版本后attr的变化

原文链接:http://www.cnblogs.com/-run/archive/2011/11/16/2251569.html Jquery1.6版本后attr的变化 Jquery1.6版本后 attr 改动后的效果: jquery1.6版本: 下文来自www.jquery.com The difference betweenattributes and properties can b…

idea main scanner 输入_哇晒,你竟然不知道idea的 Live Templates

最近公司新近来一名程序猿,在写代码时,美美写到System.out.println的时候,都要一母不差的用键盘敲上去,我问他你之前有用过eclipse中的快捷方法syso吗?于是,我给他介绍了一下,在idea中如何自定义…

Android开发需要了解的 IM 知识

引言即便在通讯如此发达的今天,IM 也依然是诸多场景下非常重要的基础能力。因此做为 一名 Android 开发,不可避免的会遇到一些IM 相关的需求或问题。本文以一个Android开发的角度来讲述IM 开发相关的基础知识。想要阅读更多技术干货、行业洞察&#xff0…

偷梁换柱做自己的封装系统

偷梁换柱做自己的封装系统!菜鸟一开始都想把自己的信息加到系统里,但封装系统只会一点!但我们可“拿来”,我们可以用偷梁换柱的方法来修改别人的系统,本文以雨林的GHOST5.0系统为例。一、准备工作1、当然是下载一个自己…

JQuery 1.6+ checkbox 状态选择

示例&#xff1a; HTML: <form><table><tr><td><input type"checkbox" id"select_all"/></td></tr><tr><td><input type"checkbox" name"select[]"/></td></…

台电u盘量产工具_简单几步,让U盘起死回生

如今&#xff0c;虽说云存储风靡&#xff0c;但U盘仍存在价值&#xff0c;毕竟在很多场合并不方便上网&#xff0c;即便如此网上存储有时也并不方便&#xff0c;也不安全。与此同时&#xff0c;如果是大文件存储&#xff0c;云盘上传和下载速度非常慢&#xff0c;并不适合海量数…

PXC集群常见错误(一)

欢迎关注MySQL 8.0必知必会系列课程。MySQL8.0必知必会-自动化部署 https://edu.51cto.com/course/16368.htmlMySQL8.0必知必会之参数标准化配置 https://edu.51cto.com/course/16358.html1.Cant start server: Bind on TCP/IP port: Address already in use…

获取GridView中RowCommand的当前选中行的索引或主键Id

获取GridView中RowCommand的当前索引行 前台添加一模版列,里面添加一个LinkButton前台 (如果在后台代码中用e.CommandArgument取值的话前台代码就必须在按钮中设置CommandArgument的值&#xff0c;值为绑定的数据库字段<asp:TemplateField HeaderText"操作"> …

系统架构师 项目经理 哪个更有前景_中央空调加地暖与五恒系统,哪个更省钱?...

每逢严冬酷暑,人们都会感叹空调是最伟大的发明,并且随着科技发展还在不断进化。从烤火取暖到空调和地暖的供暖,从纸扇电扇的吹风到空调的制冷,人们的需求正在不断提高,于是,为了满足人们的需求&#xff0c;市场上又衍生出了家装五恒系统。 恒温、恒湿、恒氧、恒洁、恒静这…

软件架构基本原则

软件架构本质上是绘制一幅复杂素描所打的草稿&#xff0c;我还说&#xff0c;如果你罩得住&#xff0c;可以不需要这个草稿。但这只是“理论上”&#xff0c;我们写软件&#xff0c;基本上不是在写只有几千行的代码的小程序&#xff0c;而是写数千万行的大型程序。《道德经》说…

Smarty目录结构和子目录路径问题

原文链接&#xff1a;http://bbs.csdn.net/topics/80223905 问题 1).最初在模板文件中使用了绝对路径&#xff08;相对于站点根的路径 ).如在system_info.tpl中图片是这样显示的<img src"/templates/default/images/logo.gif"/>这样当系统发布时&#xff0c;…

c++直角坐标系与极坐标系的转换_一篇阅读量高达2百6十多万的关于坐标系和投影的相关知识探讨...

本文转载于CSDN作者rsyaoxin这是一篇关于坐标和投影的「神文」截止目前浏览量已达2698239是相关文章中不可打破的神话...文末有本文作者推荐的两款坐标转换的小工具下载链接回想一下&#xff0c;接触遥感专业也有几个年头了&#xff0c;而现在越来越偏离遥感了&#xff0c;突然…

c# xmlhttp POST提取远程webservice数据

public string cancel(string StudentID,string Mobile){string datanull;data "<?xml version1.0 encodingutf-8?><soap:Envelope xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:xsdhttp://www.w3.org/2001/XMLSchema xmlns:soaphttp://schemas.…

Javascript实现的左右滑动菜单

原文链接&#xff1a;http://www.cnblogs.com/miqi2214/archive/2009/04/28/1445308.html Javascript实现的左右滑动菜单 先看Demo便于理解&#xff1a;请大家往这里看 业务需求&#xff1a; 1. 菜单个数不固定&#xff0c;当菜单个数长度小于给定范围宽度&#xff0c;则左右移…

查询用户分配角色TCODE

s_bce_68001419 转载于:https://www.cnblogs.com/yangliang/archive/2009/04/13/1434862.html

query string parameters什么意思_public static void main(String[] args) 是什么意思?(转)...

public static void main(String[] args)&#xff0c;是java程序的入口地址&#xff0c;java虚拟机运行程序的时候首先找的就是main方法。一、这里要对main函数讲解一下&#xff0c;参数String[] args是一个字符串数组&#xff0c;接收来自程度序执行时传进来的参数。如果是在控…

经典算法:位图排序

最近发现一个有趣的排序算法&#xff0c;通过位图来完成排序。位图排序其实就是基数排序&#xff0c;只不过位图排序的下标是比特位。 问题描述 输入&#xff1a;一个最多包含n个正整数的文件&#xff0c;每个数都小于n&#xff0c;其中n10^7。如果在输入文件中有任何正数重复出…

PHP中删除目录的三种方法

原文链接&#xff1a;http://www.chinaz.com/program/2008/1022/41645.shtml PHP中删除目录的三种方法 1、递规法&#xff1a;利用递归一层一层的删。 deleteDir(&#xff04;dir) { if (rmdir(&#xff04;dir)false && is_dir(&#xff04;dir)) {if (&#xff04;d…

b样条曲面绘制 opengl_CAD制图软件中如何利用EXCEL输入坐标绘制曲线?

当在使用浩辰CAD制图软件绘制图纸的过程中&#xff0c;经常要绘制由多个坐标点连接成的曲线时&#xff0c;有什么方便快捷的方法吗&#xff1f;那当然是有的。利用EXCEL表格保存数据并与CAD制图软件巧妙地结合起来&#xff0c;就能很容易地画出曲线。下面给大家详细介绍一下吧&…