模块化开发

article/2025/10/22 10:09:24
模块化开发
1. 模块化开发最终的目的是将程序划分成 一个个小的结构
2. 这个结构中编写属于 自己的逻辑代码 ,有 自己的作用域 ,定义变量名词时不会影响到其他的结构。
3. 这个结构可以将自己希望暴露的 变量、函数、对象等导出 给其结构使用, 也可以通过某种方式, 导入 另外结构中的 变量、函数、对象 等。
早期没有模块化
没有模块化带来了很多的问题:比如命名冲突问题,立即函数调用表达式解决这个问题。
const moduleA = (function () {let name = "lisi";let age = 18;return {name,age,};
}());

缺点:

1. 每个文件中的代码都需要包裹在一个匿名函数中来编写

2. 可能出现模块名称相同的情况

CommonJS
CommonJS规范的核心变量 exports、module.exports、require
1. exports和module.exports 可以负责 对模块中的内容进行导出
2. require函数 可以帮助我们 导入其他模块(自定义模块、系统模块、第三方库模块)中的内容
exports导出
exports是一个对象,我们可以在这个对象中添加很多个属性,添加的属性会导出。
const UTIL_NAME = "lisi";function add(a, b) {return a + b;
}exports.UTIL_NAME = UTIL_NAME;
exports.add = add;

引入:

const aaa = require("./aaa.js");
console.log(aaa.UTIL_NAME);
console.log(aaa.add(1, 2));

如果在 引入方 修改 aaa 对象的属性,在 导出方 也会修改。

引入方:

const aaa = require("./aaa.js");
console.log(aaa.UTIL_NAME);
aaa.UTIL_NAME = "zhangsan";

导出方:

const UTIL_NAME = "lisi";exports.UTIL_NAME = UTIL_NAME;setTimeout(() => {console.log(exports.UTIL_NAME);
}, 2000);

效果:

 原理:

 共同修改一块内存。

module.exports导出
module才是导出的真正实现者
const name = "lisi";
console.log(exports == module.exports); // truemodule.exports = {name: "zhangsan",
};
exports.name = "wangwu";===============================================const aaa = require("./aaa.js");
console.log(aaa.name); // zhangsan
const name = "lisi";
console.log(exports == module.exports); //trueexports = {name: "zhangsan",
};
module.exports.name = "wangwu";==============================================const aaa = require("./aaa.js");
console.log(aaa.name); // wangwu

所以,require 的本质是在找 module.exports 对象。

内存图:

CommonJS规范缺点
        CommonJS加载模块是同步的,只有 等到对应的模块加载完毕 当前模块中的内容才能被运行, 如果将它应用于浏览器, 浏览器 加载js文件需要先从服务器将文件下载下来 ,之后 再加载运行, 那么采用 同步的就意味着后续的js代码都无法正常运行 ,即使是 一些简单的DOM操作
ES Module
ES Module 和 CommonJS 的差异
1.  使用了 import export 关键字, export 负责将模块内的内容 导出, import 负责从其他模块 导入 内容。
2. 采用 编译期的静态分析 ,并且也 加入了动态引用的方式

使用方式:

1. 常规用法:
const name = "lisi";
const age = 18;function sayHello() {console.log("hello");
}export { name, age, sayHello };

导入:

import { name, age, sayHello } from "./aaa";

2. 导出时,起别名

const name = "lisi";
const age = 18;function sayHello() {console.log("hello");
}export { name as fname, age, sayHello };

导入时,起别名

import { name as fname, age, sayHello } from "./aaa";

3. * 导入

import * as foo from "./aaa";
console.log(foo.name);
console.log(foo.age);
foo.sayHello();

default用法(默认导出)

        默认导出export时可以不需要指定名字,导入时不需要使用 {},并且可以自己来指定名字,在一个模块中,只能有一个默认导出(default export)

function sayHello() {console.log("hello");
}export default sayHello;==============================  使用import fun from "./aaa";
fun();

import函数

动态加载某一个模块,import函数返回一个Promise,可以通过then获取结果


http://chatgpt.dhexx.cn/article/SX8cjL2o.shtml

相关文章

HttpClient CloseableHttpClient GetMethod PostMethod http

pom依赖 <!--HttpClient的依赖--><dependency><groupId>commons-httpclient</groupId><artifactId>commons-httpclient</artifactId><version>3.1</version></dependency><!--CloseableHttpClient的依赖--><de…

JAVA小工具-05-HttpClient/PostMethod上传文件(解决中文文件名乱码问题)

言于头:本节讨论的是在项目中利用HttpClient/PostMethod相关api进行上传文件操作时&#xff0c;会出现上传中文文件名乱码问题。为解决这个问题&#xff0c;下面是总结的一个HTTP工具类以及测试用例。 public class HttpUtils {public static final String UTF_8 "UTF-8&…

解决PostMethod的中文乱码

解决HttpClient的PostMethod的中文乱码问题 问题场景&#xff1a; 解决代码&#xff1a; 请求时设定编码格式&#xff1a; post.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "utf-8"); 完整代码&#xff1a; /*** 封装请求参数&#xff0…

php 取整,PHP取整的方法有哪些

本篇文章主要给大家介绍PHP取整的四种方法。 PHP实现取整的问题&#xff0c;不仅在我们学习PHP过程中会遇到&#xff0c;在我们PHP面试过程中也是常见的考点之一。 下面我们结合简单的示例给大家总结介绍PHP取整的四种方法。 第一种方法&#xff1a;直接取整&#xff0c;舍弃小…

php 如何取整,解析php取整的几种方式

解析php取整的几种方式 floor 舍去法取整 语法格式:float floor ( float value )返回不大于value 的下一个整数&#xff0c;将value 的小数部分舍去取整。floor() 返回的类型仍然是float&#xff0c;因为float 值的范围通常比integer 要大。 echo floor(4.3); // 4 echo floo…

VUE 数据分页

只要涉及到数据查询&#xff0c;通常我们都会进行分页查询。 假设你的表中有上百万条记录&#xff0c;不分页的话&#xff0c;我们不可能一次性将所有数据全部都载入到前端吧&#xff0c;那前后端都早就崩溃了。 结合 Spring Spring 和 Vue 都提供了开箱即用的分页功能。 S…

前端Vue分页及后端PageHelper分页综合运用

分页显示数据对项目开发中尤为重要&#xff0c;同时能提升用户体验&#xff0c;下面的前端css、js是我引用这篇文章的《使用Vue开发一个分页插件》&#xff0c;我在这个的基础上结合了后端稍微完善了一下&#xff0c;修改了disable的样式&#xff0c;在里面加了pointer-events:…

antd design vue分页组件

我们在使用分页组件的时候可以有两种方法&#xff1a; 第一种是直接用表格()的自定义:pagination属性最方便&#xff1b;如下图所示&#xff1a; 第二种是分页组件 这里我总结的是第二种方法的使用&#xff0c;由于是 Ant Design Vue 的组件&#xff0c;所以必须安装Ant Desig…

Vue分页页码栏设计

Vue分页页码栏设计 效果展示HTML数据需要函数需要运用 效果展示 HTML <div class"page_bar no-select"><ul class"clearfix"><li class"iconfont":class"{vh : currentPage 1}"click"subCurrentPage">&…

超级详细:一个漂亮的Vue分页器组件的实现

整篇分两个部分&#xff1a; 思路部分&#xff1a;讲解怎么实现分页器组件【大把时间看-建议】 后面部分&#xff1a;按照步骤&#xff0c;直接引入组件【没有时间看-建议】 思路&#xff1a;基于连续页码进行判断 需要添加分页器的组件&#xff08;Search组件&#xff09;中…

vue实现分页vue分页查询怎么实现

效果图&#xff1a; 代码&#xff1a; 复制过去即可运行 <!DOCTYPE html> <html lang"en" xmlns:th"http://www.w3.org/1999/xhtml"> <head><meta charset"UTF-8"><title>Title</title><!-- <scrip…

vue分页单位设置为中文格式

根据我搭建前端项目时遇到的问题做一个记录&#xff0c;我下载了一个vue-element-admin前端项目demo&#xff0c;但是默认情况下此demo分页展示时为如下图所示&#xff1a; 遇到此种情况想要调整为中文显示时&#xff0c;如下中文显示案例&#xff1a; 此时需要修改demo项目中…

vue分页器的封装

1.需要注册为全局组件 //main.js // 封装分页器为全局组件 Vue.component(Pagination.name,Pagination); 2.父组件的使用分页器&#xff0c;需要传递相应的参数和自定义事件 <Pagination :pageNo"searchParam.pageNo" :pageSize"searchParam.pageSize"…

django与vue分页

后端django进行自定义分页 1.编写自定义配置文件 from rest_framework.pagination import LimitOffsetPaginationclass LimitPagination(LimitOffsetPagination):max_limit 2 # 最大limit限制&#xff0c;默认Nonedefault_limit 2 # 默认限制&#xff0c;和page_size作用…

Django+vue 分页展示

这里提供两种分页方法 一种是手写分页,不常用,但是明白一下分页的逻辑实现 第二种是用heyui提供的组件.很多功能都给封装好了,用起来也比较美观. 手写分页 后端接口 class GoodList(APIView):def get(self, request):# 当前页page int(request.GET.get(page, 1))# 一页有多…

Vue分页及页码跳转

效果如下&#xff1a; HTML&#xff1a; <ul class"page f16 tc mt30"> <li> <span v-if"page > 1"><b click"page--,pageClick()">上一页</b></span> <span v-if"page 1">上一页<…

VUE分页出现省略号

VUE分页出现省略号 废话不多说直接上代码 calcPageNum() {let pageTotal Math.ceil(this.total / this.limit); //获取最大页码数let cur this.currentPage;//获取当前页码数if (pageTotal < 7) {//判断什么时候正常显示return Math.ceil(this.total / this.limit);} els…

vue 分页表格数据导出

vue分页表格数据导出功能&#xff0c;超简单&#xff01;不用安装不用引入 写个方法即可实现 //导出exportExcel() {let url "/VueDemo/api/record/export.htm"; //这里写后台给的接口&#xff0c;注意反向代理也要写上&#xff01;VueDemo是我这边的反向代理url …

vue分页功能Bug

今天分页功能报错了&#xff0c;报错是这样报错的 看代码 <pagination v-show"adminTotal>0":total"adminTotal":page.sync"adminParams.pageNum":limit.sync"adminParams.pageSize"pagination"getAdminListPage" /&…

vue 分页

分页效果实现 思路&#xff1a; 1.每页显示的数量 2.当前页数 3,总页数 , 总页数放在computed中计算 放在页面 splice截取数组元素 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport&qu…