ES6 模块化编程 详解

目录

一、基本介绍

二、基本原理示意图 

三、传统CommonJS实现模块化编程

        1.介绍 : 

        2.实例 : 

四、ES6新特性实现模块化编程

        1.介绍 : 

        2.实例 : 


一、基本介绍

        (1) ES6新特性——模块化编程,用于解决传统非模块化开发中出现的"命名冲突", "文件依赖"等问题。

        (2) 类似于Java中可以引入其他已经写好的模块完成开发,JS也引入了模块化编程;开发者只需要实现核心的业务逻辑即可

        (3) JavaScript中使用"Module"(/ˈmɑːdʒuːl/)来实现模块化编程。


二、基本原理示意图 

                在Java中,可以将多个功能相关的.java文件放在同一个包下进行统一管理,比如Java后端三层经典架构(Web层-Service层-DAO层);JS中的模块Module就是类似于这样的一种机制,其目的都是实现“分门别类,各司其职”。
                JS模块化编程的基本原理示意图,如下所示 : 


三、传统CommonJS实现模块化编程

        1.介绍 : 

        (1) CommonJS是一种 JavaScript 语言的模块化规范,它规定每个.js文件就是一个模块,有自己的作用域。在文件中定义的变量、函数、类或对象,都是私有的,对其他.js文件(即其他模块)都不可见

        (2) CommonJS使用格式——
             module.exports = {} / exports = {}导出模块;(首先在要使用的其他模块中写下导出语句)
             
let / const var_name = require("__.js")导入模块。(然后在当前模块中写下导入语句)

        2.实例 : 

                定义calculate.js,用来模拟要使用的其他模块,需要在calculate.js文件中定义导出语句。
                calculate.js代码如下 : 

//def some variables and constants
let color = "cyan";
const PI = 3.1415926;
const E = 2.71828182;//The function used to calculate the sum of two numbers
let plus = function (number1, number2) {return parseInt(number1) + parseInt(number2);
}//The function used to calculate the difference of two numbers
let minus = function (number1, number2) {return parseInt(number1) - parseInt(number2);
}//def a object
let blogger = {name: "Cyan_RA9",age: 21,write() {console.log("I relish writing blogs.")}
}//export the data of this .js file out(导出模块)
module.exports = {plus: plus,minus: minus,eValue: E,PIValue: PI
}//若导出的名称和本身属性名一致,可以使用ES6新特性———对象简写:
exports = {plus,minus,E,PI
}

                定义testCalculate.js,用来模拟需要导入其他模块的模块,在testCalculate.js中定义导入语句,导入calculate.js模块。
                testCalculate.js代码如下 : 

//import the data of other .js file in(导入模块)
let calculate = require("./calculate");     //默认携带.js尾缀
//亦可以通过解构赋值来导入模块中的部分数据
let { plus } = require("./calculate");
let { color } = require("./calculate");/*导入模块后,通过"名称."的形式来调用,类似于JS中对象的调用。*/
console.log(calculate.plus(11, 5));
console.log(calculate.minus(11, 5));
console.log(plus(11, 5));console.log(calculate.eValue);
console.log(calculate.PIValue);
console.log(color);/*若IDEA没有报出语法错误,说明导入成功!若导入模块失败,使用其他模块中的内容会报错———Missing require() statement*/

四、ES6新特性实现模块化编程

        1.介绍 : 

        ES6新特性实现模块化编程,在使用上和传统CommonJS原则一致,都是先写导出语句以导出模块,再写导入语句来导入模块。

        导出模块可以使用三种方式——
        (1) export {}; (2) export 定义名称 = ; (3) export default {};

        导入模块有对应的两种方式——
        (1) import {} from "__.js"; (2) import 名称 from "__.js"; [方式(2)主要用于对应第三种导出语句]

        PS : 

        1> ES6的模块化无法在Node.js中执行,需要用Babel转码ES5之后再执行。

        2> export可以导出一切JS变量,包括基本类型变量,函数,数组,对象等。

        2.实例 : 

                另定义calculate_EX.js,用来模拟要使用的其他模块,需要在calculate_EX.js文件中定义导出语句。
                calculate_EX.js代码如下 : 

//define some variables and constants
let symbol = "RA9";
let color = "cyan";//The function used to calculate the sum of three numbers
let plus = function (number1, number2, number3) {return parseInt(number1) + parseInt(number2) + parseInt(number3);
}//The function used to calculate the difference of two numbers
let minus = function (number1, number2) {return parseInt(number1) - parseInt(number2);
}//def a object
let blogger = {name: "Cyan_RA9",age: 21,write() {console.log("I relish writing blogs.")}
}//(1)第一种导出方式———批量导出(可以全部导出,也可以部分导出)
export {plus,minus,blogger,color
}
//(2)第二种导出方式———在定义时就直接导出(直接在定义语句前面加上export关键字)
export let divide = function (number1, number2) {return number1 / number2;
}//(3)第三种导出方式———default默认导出
export default {multiply(number1, number2) {return number1 * number2;},symbol
}

                另定义testCalculate_EX.js,用来模拟需要导入其他模块的模块,在testCalculate_EX.js中定义导入语句,导入calculate_EX.js模块。
                testCalculate_EX.js代码如下 : 

//(1) 通过解构赋值的形式导入模块// [可以选择性的导入部分数据]// [要求导入和导出时的名称一致]
import { blogger } from "./calculate_EX";
console.log(blogger);//(1) 通过解构赋值的形式导入模块
import {divide} from "./calculate_EX";
console.log(divide(12, 3));//(2) 通过定义名称的形式导入模块(对应导出模块的default导出语句)//该方式可用于解决命名冲突问题
import demoI from "./calculate_EX";
console.log(demoI.symbol);
console.log(demoI.multiply(11, 5));

        System.out.println("END-------------------------------------------------------------");

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

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

相关文章

大数据Flink(一百零一):SQL 表值函数(Table Function)

文章目录 SQL 表值函数(Table Function) SQL 表值函数(Table Function) Python UDTF,即 Python TableFunction,针对每一条输入数据,Python UDTF 可以产生 0 条、1 条或者多条输出数据,此外,一条输出数据可以包含多个列。比如以下示例,定义了一个名字为 split 的Pyt…

Pillow库(PIL)入门教程

Pillow库,PIL的升级版,一个免费开源的Python图像处理库。 Pillow 库(有时也称 PIL 库) 是 Python 图像处理的基础库,它是一个免费开源的第三方库,由一群 Python 社区志愿者使用 Python 语言开发而成&#…

如何将Linux上部署的5.7MySql数据库编码修改utf8(最新版)

如何将Linux(服务器)上部署的5.7MySql数据库编码修改utf8(最新版) 一、解决办法步骤1步骤2(此处为问题描述吐槽,可以直接跳过该步骤到步骤三)步骤3步骤4步骤5 二、结果 # 前言 提示&#xff1a…

浏览器标签上添加icon图标;html引用ico文件

实例 <link rel"shortcut icon" href"./XXX.ico" type"image/x-icon">页面和图标在同一目录内 则 <link rel"shortcut icon" type"text/css" href"study.ico"/>可以阿里矢量图库关键字搜索下载自己…

当数据库遇上深度学习:AI DataLoader 助力因子管理模型训练全流程

深度学习模型有能力自动发现变量之间的关系&#xff0c;而这些关系通常是不可见的&#xff0c;这使得深度学习可以挖掘新的因子和规律&#xff0c;为量化投资策略提供更多可能性。在传统的量化策略开发流程中&#xff0c;通常会使用 Python 或第三方工具生成因子&#xff0c;并…

Kafka快速入门(最新版3.6.0)

文章目录 一、初识MQ1.1 什么是MQ1.2 同步和异步通讯1.1.1 同步通讯1.1.2 异步通讯 1.3 技术对比1.4 MQ的两种模式 二、初识Kafka2.1 Kafka的使用场景2.2 Kafka基本概念2.3 Topic与Partition 三、Kafka基本使用3.1 部署前的准备3.2 启动kafka服务器3.3 Kafka核心概念之Topic3.4…

小红书女性用户洞察|2023「她研究」深度数据报告

作为新时代女性群体的聚集地、发声场&#xff0c;小红书不断涌现的「她」话题&#xff0c;承载着不同的女性特质&#xff0c;对理想自我、理想生活的期待&#xff0c;以及消费行为与决策偏好。 当代女性为回答「我是谁」、「我要什么」、「我想成为什么样的自己」&#xff0c;倾…

知识图谱+推荐系统 文献阅读

文献阅读及整理 知识图谱推荐系统 知识图谱 1 基于知识图谱的电商领域智能问答系统研究与实现 [1]蒲海坤. 基于知识图谱的电商领域智能问答系统研究与实现[D].西京学院,2022.DOI:10.27831/d.cnki.gxjxy.2021.000079. 知识点 BIO标记策略进行人工标记,构建了电商领域商品…

Spring Boot整合swagger2

在上一篇中我们围绕了Spring Boot 集成了RESTful API项目&#xff0c;但是我们在实际开发中&#xff0c;我们的一个RESTful API有可能就要服务多个不同的开发人员或者开发团队&#xff0c;包括不限于PC,安卓&#xff0c;IOS&#xff0c;甚至现在的鸿蒙OS&#xff0c;web开发等等…

laravel框架介绍(二) 打开站点:autoload.php报错

Laravel&#xff1a;require..../vendor/autoload.php错误的解决办法 打开站点&#xff1a;http://laraveltest.com:8188/set_api-master/public/ set_api-master\public\index.php文件内容为&#xff1a; 解决办法&#xff1a; 1. cd 到该引用的根目录&#xff0c;删除 compo…

TLSF内存管理算法原理详解

TLSF算法原理概述 TLSF算法的核心优势在于其通过位运算执行内存块匹配算法&#xff0c;并兼顾了内存管理的额外内存消耗&#xff0c;无论是从内存池申请内存块还是释放内存块回内存池其操作都是O(1)。TLSF组织了一张一二级索引表映射其所有管理内存块的闲忙状态&#xff0c;并通…

git简介和指令

git是一个开源的的分布式版本控制系统&#xff0c;用于高效的管理各种大小项目和文件 用途&#xff1a;防止代码丢失&#xff0c;做备份 项目的版本管理和控制&#xff0c;可以通过设置节点进行跳转 建立各自的开发环境分支&#xff0c;互不影响&#xff0c;方便合并 在多终端开…

【学习笔记】记录一个win 11 操作文件卡顿,Windows 资源管理器CPU占用飙升问题

【学习笔记】记录一个win 11 操作文件卡顿&#xff0c;Windows 资源管理器CPU占用飙升问题 前段时间忽然发现电脑操作文件都会特别的卡&#xff0c;例如复制粘贴文件&#xff0c;写入文件等操作&#xff0c;卡的怀疑人生&#xff0c;原本以为是电脑太久没重启&#xff0c;重启…

Maven系列第8篇:大型Maven项目,快速按需任意构建

本篇涉及到的内容属于神技能&#xff0c;多数使用maven的人都经常想要的一种功能&#xff0c;但是大多数人都不知道如何使用&#xff0c;废话不多说&#xff0c;上干货。 需求背景 我们需要做一个电商项目&#xff0c;一般都会做成微服务的形式&#xff0c;按业务进行划分&am…

折纸问题

折纸的次数 —— 从上到下的折痕 本质上是中序遍历的问题&#xff0c;因为每一次在已有的折痕后折的时候&#xff0c;当前折痕上的折痕一定为凹&#xff0c;当前折痕下的折痕一定为凸 。实际模拟了一个不存在的二叉树结构的中序遍历。 注&#xff1a;折纸折几次整颗二叉树就有…

树形数据增删改查

功能描述&#xff1a; 默认展示所有项目点击项目展示当前项目下的所有区域点击区域展示当前区域下的所有工位以上以树形图格式展示项目&#xff0c;区域&#xff0c;和工位都可进行增加 修改 和删除&#xff0c;每个图标hover时显示对应提示信息项目&#xff0c;区域&#xff…

Git(二)版本控制、发展历史、初始化配置、别名

目录 一、版本控制1.1 为什么要使用版本控制&#xff1f;1.2 集中化的版本控制系统1.3 分布式的版本控制系统1.3 两种版本控制系统对比集中式&#xff08;svn&#xff09;分布式&#xff08;git&#xff09; 二、发展历史三、初始化配置3.1 配置文件3.2 配置内容 四、别名 官网…

Mac 超好用的工具推荐

Arc Arc 是 2022 年 4 月发布的浏览器产品&#xff0c;在介绍 Arc 浏览器之前&#xff0c;让我们来看下以 Chrome、FireFox、Edge、Safari 为代表的的传统浏览器&#xff1a; 难怪《浏览器是怎么工作的》作者 Paul Irish 曾说&#xff0c;尽管 W3C 并未规范浏览器界面&#xf…

欧拉图相关的生成与计数问题探究

最近学了一波国家集训队2018论文的最后一个专题。顺便带上了一些我的注解。 先放一波这个论文 1.基本概念 欧拉图问题是图论中的一类特殊的问题。在本文的介绍过程中&#xff0c;我们将会使用一些图 论术语。为了使本文叙述准确&#xff0c;本节将给出一些术语的定义。 定义…