模块化及模块化规范

2023-11-04

什么是模块化:

将一个项目拆分为若干块,每块之间以一定的形式进行通信,而每块内部的内容都是独立的

前端没有模块化会造成什么问题:
耦合性高,不利于代码维护
污染全局的命名空间,造成代码冲突

模块化的优点:
减少命名冲突
功能独立,可以按需加载
大大提高了代码的可维护性和复用性

模块化规范中常用的两种:

commonJS:

引入方式require
导出方式module.exports

每个模块内部, module变量代表当前模块。这个变量是一个对象,它的 exports 属性(即 module.exports )是对外的接口。加载某个模块,其实是加载该模块的 module.exports 属性。

模块化例子:

此时通过module.exports暴露了a,b变量及函数test,不在module.exports下的就属于私有的数据,外部无法访问到。

// test/test1.js文件
let a = 1;
let b = 2;
 
let test = () => {
    console.log('test');
}
 
module.exports = {
    a,
    b,
    test
}

 test2文件内导入:

// test2/test2.js
var { a, b,test } = require('./test/test1.js')

ES6:

导入方式:import
导出方式:export
默认导出:export default

//test/test1.js
let a = 1;
let b = 2;
let test=()=>{
    console.log("test")
}
export {
    a,
    b,
    test
}
// test2/test2.js
import { a, b,test } from './test/test1.js'

export default命令:

一个文件内只能使用一次

在import命令接收test1中的数据时,必须使用大括号来接收,而且括号内的数据要和test1中保持一致(a,b,test),需要重新命名时,要是用as关键字,如import{ a as another} from './test/test1.js'

但如果test1文件中使用export default来暴露,则import时可以使用任意名字,也不需要使用大括号来接收

补充:

require和import的区别

commonjs的用法本质上是将要导出的对象赋值给module这个的对象的export属性,在其他文件中通过require这个方法访问该属性

es6中导出的对象必须与模块中的值一一对应,换一种说法就是导出的对象与整个模块进行解构赋值。

模块加载时间:

require:运行时加载  ——  require 是赋值过程,且是运行时才执行

import:编译时加载(效率更高)—— import 是解构过程,且是编译时执行,import 命令会提升到整个模块的头部

对性能的影响:

require:性能相对于import稍低,因为 require 是在运行时才引入模块,并且还赋值给某个变量

import :只需要依据 import 中的接口在编译时引入指定模块,所以性能稍高。

模块本质:

require:模块就是对象,输入时必须查找对象属性

import:模块不是对象,而是通过 export 命令显式指定输出的代码,再通过 import 命令输入

模式:

CommonJs模块默认采用非严格模式

ES6 的模块自动采用严格模式

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模块化及模块化规范 的相关文章

  • URL下载网络资源

    URL 统一资源定位符 定位互联网上的某一个资源
  • $AT2663$ $Namori$ $Grundy$

    题目链接戳这里 简化题意 题意 有一个弱联通的有向图 含有 个结点和 条边 试问是否存在方案 赋给每个结点一个自然数权值 满足对于所有结点 mex in 一个集合的 mex 是没有在这个集合中出现的最小自然数 显然是个基环树 先考虑在树上的
  • python爬取百度百科

    来源于imooc教程实例 课程地址http www imooc com learn 563 以下是自己经过每一步分析 最后成功完成 代码模块化结构分明 不过自己一开始分析还是有点晕晕的 毕竟还不太习惯 以后多练习吧 每一份的收获都来之不易

随机推荐

  • jqGrid学习总结_5 使用formatter

    1 formatter与unformat官网 http www trirand com jqgridwiki doku php id wiki custom formatter formatter functionFormatter cel
  • IDEA设置自动生成类和方法注释

    以IDEA2020 3版本进行说明 一 设置创建类时生成的注释 打开 File gt settings gt Editor gt File and Code Templates 或者在搜索框搜索File and Code Templates
  • 关于antd中popover气泡卡片deep修改样式不生效问题

    今儿写代码的时候遇到的一个问题 原是因为使用气泡组件出现的定位位置不对 查出是因为全局上写了一个zoom属性 但是这个zoom属性因为在其他组件上使用了不能动 所以考虑修改气泡组件的样式来自定义位置 利用deep修改样式后发现样式不生效 后
  • 使用pandas to_sql方法进行数据整合和清洗

    使用pandas to sql方法进行数据整合和清洗 在数据科学和数据分析领域 数据集的整合和清洗是非常重要的 而pandas是一个强大的数据处理库 它提供了to sql 方法 可以将Dataframe对象保存到多种不同类型的SQL数据库中
  • Points Within

    http acm zju edu cn onlinejudge showProblem do problemId 81 Statement of the Problem Several drawing applications allow
  • 有源滤波器快速使用设计和精确设计

    有源滤波器的快速实用设计 pdf https max book118 com html 2019 0114 8013057114002001 shtm 有源滤波器精确设计手册 pdf https max book118 com html 2
  • NAT功能与分类

    NAT的分类 比较早的有STUN RFC3489 定义的四种类型 Full Cone A full cone NAT is one where all requests from the same internal IP address a
  • spring boot打jar包、war包的区别

    maven打包 项目的打包类型 pom jar war packing默认是jar类型
  • Jenkins (一)

    Jenkins 一 Docker Jenkins 部署 一 安装 jenkins mkdir p home tester data docker jenkins vim jenkins lts jdk11 sh jenkins lts jd
  • 【大数据】Hadoop实验报告

    文章目录 实验一 熟悉常用的Linux操作和Hadoop操作 1 实验目的 2 实验平台 3 实验内容和要求 实验二 熟悉常用的HDFS操作 1 实验目的 2 实验平台 3 实验步骤 实验三 熟悉常用的HBase操作 1 实验目的 2 实验
  • c语言里如何倒序输出字符,倒序输出字符 C语言

    匿名用户 1级 2010 11 26 回答 include include void main char string1 200 用于存放输入的字符串 char string2 200 用于存放倒序后的字符串 int invertion c
  • 6.S081笔记

    Lec 01简单介绍 XV6 OS 运行在一个RISC V微处理器上 我们用QEMU模拟RISC V 从而在一个QEMU模拟器上运行XV6 Lec 03 硬件对强隔离的支持 两种方式实现了隔离性 内核态 用户态的切换 user kernel
  • 手把手带你入门github

    前言 github是一个面向开源及私有软件项目的托管平台 什么叫面向开源呢 说白了就是把代码共享 微软以前并不秉持着开源的态度 企图以windows占有率坐拥江山 可惜开源共享的大势谁都不能阻挡 哪怕是微软帝国 这不 斥资把这个国际知名代码
  • mysql修改自增字段自增起始值

    需要修改自增字段的起始值 以使其后续插入的主键id从自定义的值开始自增 先后使用了三种方法 前两种均告失败 第三种成功 1 直接在navicat里进行设置 结果可以保存但保存无效 本方法失败 2 使用 SQL 语句进行修改 SQL 执行结果
  • 系统安装部署过程

    Linux系统安装部署过程 VMware软件的使用 第一个历程进入系统引导界面进行配置 引导项说明 1 安装centos7系统 2 测试光盘镜像并安装系统 3 排错模式
  • KB: DFS 复制超过最大离线时间引起的AD同步失败

    故障描述 域内有两台DC 辅DC无法同步SYSVOL 辅DC降级后 退域 再加入域 再升级为域控制器 依然无法同步SYSVOL 使用NET SHARE命令对两台DC进行诊断 主DC结果 共享名 资源 注解 C C 默认共享 IPC
  • 【Mysql Workbench导入excel数据】

    使用Workbench导入excel表插入数据库表 导入excel表就可以快速的插入多条数据 比如需要随机生成一些假数据到数据库表的话 数量要求比较多的情况下 使用excel生成数据再导入就很快 步骤 下面来讲解怎样导入excel表数据插入
  • 微信卡券之众多坑总结(Java)---优惠券

    1 建议一个字一个字读微信文档 从头到尾 不要只看卡券那一栏 https developers weixin qq com doc offiaccount Cards and Offer Redeeming a coupon voucher
  • Go语言实现Onvif客户端:6、获取rtsp流地址

    Go语言实现Onvif客户端 6 获取rtsp流地址 文章目录 Go语言实现Onvif客户端 6 获取rtsp流地址 1 代码 2 结果 3 查看 1 代码 获取并选择Profile token后获取rtsp流地址也是调用接口即可 Desc
  • 模块化及模块化规范

    什么是模块化 将一个项目拆分为若干块 每块之间以一定的形式进行通信 而每块内部的内容都是独立的 前端没有模块化会造成什么问题 耦合性高 不利于代码维护 污染全局的命名空间 造成代码冲突 模块化的优点 减少命名冲突 功能独立 可以按需加载 大