【前端】ES6模块化

文章目录

  • 1. 模块化概述
    • 1.1 什么是模块化?
    • 1.2 为什么需要模块化?
  • 2. 有哪些模块化规范
  • 3. CommonJs
    • 3.1 导出数据
    • 3.2 导入数据
    • 3.3 扩展理解
    • 3.4 在浏览器端运行
  • 4.ES6模块化
    • 4.1 浏览器运行
    • 4.2 在node服务端运行
    • 4.3 导出
      • 4.3.1 分别导出
      • 4.3.2 统一导出
      • 4.3.3 默认导出
      • 4.3.4 混用
    • 4.4 导入
      • 4.4.1 导入整个模块
      • 4.4.2 命名导入(对应导出方式: 分别 导出,统一导出)
      • 4.4.3 默认导入(对应导出方式: 默认导出)
      • 4.4.4 混用
      • 4.4.5 动态导入
      • 4.4.6 import可以不接收任何数据
  • 5. 数据引用问题
  • 6. AMD模块化规范
  • 7.CMA模块化规范

参考视频地址

1. 模块化概述

1.1 什么是模块化?

  • 将程序文件依据一定规则拆分成多个文件,这种编码方式就是模块化的编码方式.
  • 拆分出来每个文件就是一个模块,模块中的数据都是私有的,模块之间互相隔离
  • 同时也能通过一些手段,可以把模块内的指定数据"交出去",供其他模块使用

1.2 为什么需要模块化?

随着应用的复杂度越来越高,其代码量和文件数量都会急剧增加,会主键引发以下问题:

  1. 全局污染问题
  2. 依赖混乱问题
  3. 数据安全问题

2. 有哪些模块化规范

在这里插入图片描述

3. CommonJs

参考nodejs部分

3.1 导出数据

在CommonJs标准中,导出数据有两种方式

  1. module.exports=value
  2. exports.name=value

注意:

  1. 每个模块内部的:this,exports,modules.exports在初始初始化时,都指向同一个空对象,该空对象就是当前模块到处的数据,如下图:
    在这里插入图片描述
  2. 无论如何修改到处对象,最终导出的都是module.exports的值.
  3. exports是对modules.exports的初始引用,仅为了方便导出对象添加属性,所以不能使用exports=value的形式导出数据,但是可以使用module.exports=xxx导出数据

在这里插入图片描述

3.2 导入数据

//方式1
// var school = require('./school.js');
// console.log(school.name)
//方式2 (解构)
var {name,getTel,getCities} = require('./school.js');
//结构时重命名
var {name:stuName,getTel:stuTel,getHobby} = require('./student.js');
console.log(name)
console.log(stuName)
console.log(getTel)
console.log(stuTel)

3.3 扩展理解

在这里插入图片描述

3.4 在浏览器端运行

在这里插入图片描述

4.ES6模块化

ES6模块化规范是一个官方标准的规范,它是在语言标准的层面上实现了模块化功能,是目前最流行的模块化规范,且浏览器与该服务端均支持该规范.

4.1 浏览器运行

html中引入js文件要用type="module"
<script type="module" src="index.js"/>

4.2 在node服务端运行

  • 方式一

文件用.mjs结尾

  • 方式二

package.json配置:"type": "module"

4.3 导出

4.3.1 分别导出

export var name = '尚硅谷'
export var solgan = '让天下没有难学的技术'export function getTel() {return '010-56253825';
}export function getCities() {return ['北京', '上海', '深圳', '成都', '武汉']
}

在这里插入图片描述

4.3.2 统一导出

var name = '张三'
var solgan = '相信明天会更好'function getTel() {return '15935150771';
}function getHobby() {return ['抽烟', '喝酒', '烫头']
}export {name, solgan, getTel, getHobby}//不是对象

在这里插入图片描述

4.3.3 默认导出

var name = '尚硅谷'
var solgan = '让天下没有难学的技术'function getTel() {return '010-56253825';
}function getCities() {return ['北京', '上海', '深圳', '成都', '武汉']
}export default {name,solgan,getTel,getCities//对象
}

在这里插入图片描述

var name = '张三'
var solgan = '相信明天会更好'function getTel() {return '15935150771';
}function getHobby() {return ['抽烟', '喝酒', '烫头']
}export default getHobby;

在这里插入图片描述

4.3.4 混用

export var name = '尚硅谷'
var solgan = '让天下没有难学的技术'function getTel() {return '010-56253825';
}function getCities() {return ['北京', '上海', '深圳', '成都', '武汉']
}
export {solgan,getTel}
export default getCities;

在这里插入图片描述

4.4 导入

4.4.1 导入整个模块

import * as schoolUtils from './school.js'console.log(schoolUtils)

4.4.2 命名导入(对应导出方式: 分别 导出,统一导出)

import {name, solgan, getTel, getCities as getCities2
} from './school.js'console.log(getCities2())

4.4.3 默认导入(对应导出方式: 默认导出)

import getCities from './school.js';console.log(getCities())

4.4.4 混用

// import {getTel,default as getCities} from './school.js';
import  getCitie22, {getTel} from './school.js';console.log(getTel())
console.log(getCitie22())

4.4.5 动态导入


var btn = document.getElementById('btn');
console.log(btn)
btn.onclick = async() =>{var promise =await import('./school.js');console.log(promise)
}

4.4.6 import可以不接收任何数据

import './school.js'

此时,我们感受到模块化确实解决了:①全局污染问题, ②依赖混乱问题 ③数据安全问题

5. 数据引用问题

  • 如下代码输出结果
function count(){var sum=1;function  increment(){sum++;}return {sum,increment};
}
var {sum,increment} = count();
console.log(sum)//1
increment()
increment()
console.log(sum)//1
  • commonJs输出
var sum=1;
function  increment(){sum++;
}module.exports = {sum,increment}
var {sum,increment} = require('./count');
console.log(sum)//1
increment()
increment()
console.log(sum)//1
  • es6输出
var sum=1;
function  increment(){sum++;
}
export {sum,increment}
import {sum,increment} from './count.js'
console.log(sum)//1
increment()
increment()
console.log(sum)//3

es6暴漏模块中的变量要用常亮const,就不会被修改了.const sum=1;

6. AMD模块化规范

7.CMA模块化规范

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

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

相关文章

强化学习笔记(5)——PPO

PPO视频课程来源 首先理解采样期望的转换 变量x在p(x)分布下&#xff0c;函数f(x)的期望 等于f(x)乘以对应出现概率p(x)的累加 经过转换后变成 x在q(x)分布下&#xff0c;f(x)*p(x)/q(x) 的期望。 起因是&#xff1a;求最大化回报的期望&#xff0c;所以对ceta求梯度 具体举例…

20-30 五子棋游戏

20-分析五子棋的实现思路_哔哩哔哩_bilibili20-分析五子棋的实现思路是一次性学会 Canvas 动画绘图&#xff08;核心精讲50个案例&#xff09;2023最新教程的第21集视频&#xff0c;该合集共计53集&#xff0c;视频收藏或关注UP主&#xff0c;及时了解更多相关视频内容。https:…

【HTML入门】Sublime Text 4与 Phpstorm

文章目录 前言一、环境基础1.Sublime Text 42.Phpstorm(1)安装(2)启动Phpstorm(3)“启动”码 二、HTML1.HTML简介(1)什么是HTML(2)HTML版本及历史(3)HTML基本结构 2.HTML简单语法(1)HTML标签语法(2)HTML常用标签(3)表格(4)特殊字符 总结 前言 在当今的软件开发领域&#xff0c…

Kubernetes学习之包管理工具(Helm)

一、基础知识 1.如果我们需要开发微服务架构的应用&#xff0c;组成应用的服务可能很多&#xff0c;使用原始的组织和管理方式就会非常臃肿和繁琐以及较难管理&#xff0c;此时我们需要一个更高层次的工具将这些配置组织起来。 2.helm架构&#xff1a; chart:一个应用的信息集合…

Kamailio 不通过 dmq 实现注册复制功能

春节期间找到一篇文章&#xff0c;需要 fg 才能看到&#xff1a; https://medium.com/tumalevich/kamailio-registration-replication-without-dmq-65e225f9a8a7 kamailio1 192.168.56.115 kamailio2 192.168.56.116 kamailio3 192.168.56.117 route[HANDLE_REPLICATION] {i…

grpc 和 http 的区别---二进制vsJSON编码

gRPC 和 HTTP 是两种广泛使用的通信协议&#xff0c;各自适用于不同的场景。以下是它们的详细对比与优势分析&#xff1a; 一、核心特性对比 特性gRPCHTTP协议基础基于 HTTP/2基于 HTTP/1.1 或 HTTP/2数据格式默认使用 Protobuf&#xff08;二进制&#xff09;通常使用 JSON/…

Intel 与 Yocto 项目的深度融合:全面解析与平台对比

在嵌入式 Linux 领域&#xff0c;Yocto 项目已成为构建定制化 Linux 发行版的事实标准&#xff0c;广泛应用于不同架构的 SoC 平台。Intel 作为 x86 架构的领导者&#xff0c;在 Yocto 生态中投入了大量资源&#xff0c;为其嵌入式处理器、FPGA 和 AI 加速硬件提供了完整的支持…

kubernetes(二)

文章目录 NamespacePodLabelDeploymentService Namespace 在Kubernetes系统中&#xff0c;Namespace是一种至关重要的资源类型&#xff0c;其主要功能在于实现多套环境的资源隔离或者多租户的资源隔离&#xff0c;默认情况下所有的Pod都能够相互访问&#xff0c;但如果不想让两…

巧妙利用数据结构优化部门查询

目录 一、出现的问题 部门树接口超时 二、问题分析 源代码分析 三、解决方案 具体实现思路 四、优化的效果 一、出现的问题 部门树接口超时 无论是在A项目还是在B项目中&#xff0c;都存在类似的页面&#xff0c;其实就是一个部门列表或者叫组织列表。 从页面的展示形式…

【数据分析】案例04:豆瓣电影Top250的数据分析与Web网页可视化(numpy+pandas+matplotlib+flask)

豆瓣电影Top250的数据分析与Web网页可视化(numpy+pandas+matplotlib+flask) 豆瓣电影Top250官网:https://movie.douban.com/top250写在前面 实验目的:实现豆瓣电影Top250详情的数据分析与Web网页可视化。电脑系统:Windows使用软件:PyCharm、NavicatPython版本:Python 3.…

【线程】基于环形队列的生产者消费者模型

1 环形队列 环形队列采用数组来模拟&#xff0c;用取模运算来模拟环状特性。 1.如何判断环形队列为空或者为满? 当环形队列为空时&#xff0c;头和尾都指向同一个位置。当环形队列为满时&#xff0c;头和尾也都指向同一个位置。 因此&#xff0c; 可以通过加计数器或者标记…

Vue指令v-html

目录 一、Vue中的v-html指令是什么&#xff1f;二、v-html指令与v-text指令的区别&#xff1f; 一、Vue中的v-html指令是什么&#xff1f; v-html指令的作用是&#xff1a;设置元素的innerHTML&#xff0c;内容中有html结构会被解析为标签。 二、v-html指令与v-text指令的区别…

OPENGLPG第九版学习 - 着色器基础

文章目录 2.1 着色器与OpenGL2.2 0penGL的可编程管线2.3 OpenGL着色语言GLSL概述2.3.1 使用GLSL构建着色器变量的声明变量的作用域变量的初始化构造函数 、 类型转换聚合类型访问向量和矩阵中的元素结构体数组多维数组 2.3.2 存储限制符const 存储限制符in 存储限制符out 存储限…

路径规划之启发式算法之二十九:鸽群算法(Pigeon-inspired Optimization, PIO)

鸽群算法(Pigeon-inspired Optimization, PIO)是一种基于自然界中鸽子群体行为的智能优化算法,由Duan等人于2014年提出。该算法模拟了鸽子在飞行过程中利用地标、太阳和磁场等导航机制的行为,具有简单、高效和易于实现的特点,适用于解决连续优化问题。 更多的仿生群体算法…

Docker Compose的使用

文章首发于我的博客&#xff1a;https://blog.liuzijian.com/post/docker-compose.html 目录 Docker Compose是什么Docker Compose安装Docker Compose文件Docker Compose常用命令案例&#xff1a;部署WordPress博客系统 Docker Compose是什么 Docker Compose是Docker官方的开源…

AP单类平均准确率

P_true N_true P_pred TP Fp N_pred FN TNP NTP&#xff08;真正样本&#xff0c;与真实框IoU大于阈值的框&#xff09; FP&#xff08;假正样本&#xff0c;与真实框IoU小于阈值的框&#xff09; TN&#xff08;真负样本&#xff0c;背景&#xff09;…

Leetcode—1427. 字符串的左右移【简单】Plus

2025每日刷题&#xff08;206&#xff09; Leetcode—1427. 字符串的左右移 实现代码 class Solution { public:string stringShift(string s, vector<vector<int>>& shift) {// shift[i] [dir, amount]// dir 0(左) or 1(右)// 左表示正, 右表示负int len…

机器学习10

自定义数据集 使用scikit-learn中svm的包实现svm分类 代码 import numpy as np import matplotlib.pyplot as pltclass1_points np.array([[1.9, 1.2],[1.5, 2.1],[1.9, 0.5],[1.5, 0.9],[0.9, 1.2],[1.1, 1.7],[1.4, 1.1]])class2_points np.array([[3.2, 3.2],[3.7, 2.9],…

股票入门知识

股票入门&#xff08;更适合中国宝宝体制&#xff09; 股市基础知识 本文介绍了股票的基础知识&#xff0c;股票的分类&#xff0c;各板块发行上市条件&#xff0c;股票代码&#xff0c;交易时间&#xff0c;交易规则&#xff0c;炒股术语&#xff0c;影响股价的因素&#xf…

Golang 并发机制-3:通道(channels)机制详解

并发编程是一种创建性能优化且响应迅速的软件的强大方法。Golang&#xff08;也称为 Go&#xff09;通过通道&#xff08;channels&#xff09;这一特性&#xff0c;能够可靠且优雅地实现并发通信。本文将揭示通道的概念&#xff0c;解释其在并发编程中的作用&#xff0c;并提供…