【JavaScript】ES6模块化开发

news/2025/2/22 22:45:48/

文章目录

    • 一. 模块化的意义
    • 二. ES6 模块化讲解
        • 定义模块:
        • 导入模块:
        • 配置模块:
        • HTML页面加载规则

一. 模块化的意义

  • 函数编程---->闭包---->命名空间---->模块化编程

  • 模块化的意义–冲突和依赖

  • 模块化思想

    • 就是指将页面根据内容的关联性分解成不同的且相互独立的模块进行开发
    • 每个模块之间没有必然的联系,互不影响,想要什么功能,就加载什么模块
    • 每个 JavaScript 文件就是一个独立的模块,
    • 大家必须以同样的方式编写模块,否则达不到预想的效果.

二. ES6 模块化讲解

  • 历史上,JavaScript 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来。

  • 在 ES6 之前,社区制定了一些模块加载方案,最主要的有 CommonJS 和 AMD 两种。前者用于服务器,后者用于浏览器。

  • ES6 在语言标准的层面上,实现了模块功能,而且实现得相当简单,完全可以取代 CommonJS 和 AMD 规范,成为浏览器和服务器通用的模块解决方案。

定义模块:

  • export命令用于规定模块的对外接口

  • 一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用export关键字输出该变量。

    //first.js
    let name = 'zhangsan';//普通变量
    const obj = {//对象或者数组name:'lisi',age:18,sex:'men'
    };
    const fn = function() {//普通函数console.log('我是函数');
    }
    class Person {constructor() {}init() {}
    }// 暴露模块
    export {name,obj,fn,Person
    }
    
  • 使用import命令的时候,用户需要知道所要加载的变量名或函数名,否则无法加载。

  • export default 暴露一个变量或者函数,调用的时候自定义名称,一个模块只能有一个默认输出,因此export default命令只能使用一次。

    export default function fn() {console.log('我是函数的返回值');
    }
    

导入模块:

  • 使用export命令定义了模块的对外接口以后,其他 JS 文件就可以通过import命令加载这个模块。

    import { name,obj,fn,Person  } from './first.js';
    console.log(name)
    console.log(obj)
    fn()
    let p1 = new Person()
    
  • 如果想为输入的变量重新取一个名字,import命令要使用as关键字,将输入的变量重命名。

    import { lastName as surname } from './profile.js';
    

配置模块:

  • 路径配置,说明当前模块是自定义的模块还是第三方模块

    import { name,obj,fn,Person  } from './first.js'; //first.js前面的./表示本地模块的配置
    

HTML页面加载规则

  • 浏览器加载 ES6 模块,也使用script标签,但是要加入type="module"属性。

  • 浏览器对于带有type="module"的script都是异步加载,不会造成堵塞浏览器

  • 即等到整个页面渲染完,再执行模块脚本,等同于打开了script标签的defer(异步)属性。

  • 如果网页有多个script type=“module”,它们会按照在页面出现的顺序依次执行。

    <script src="first.js" type="module"></script> 
    

http://www.ppmy.cn/news/6985.html

相关文章

PostgreSQL数据库TableAM——Table scan callbacks

TableAM Table scan TableAM提供了如下4个接口用于实现表数据的扫描功能。scan_begin函数的形参nkeys不为零&#xff0c;则扫描结果需要根据scan keys先进行过滤&#xff1b;pscan如果不为null&#xff0c;说明该结构体已经由parallelscan_initialize初始化过了(仅仅在table_b…

软件设计中最关键的“开闭原则”,究竟指什么呢?

前言 软件设计原则中有一条很关键的原则是开闭原则&#xff0c;就是所谓的对扩展开放&#xff0c;对修改关闭。个人觉得这条原则是非常重要的&#xff0c;直接关系到你的设计是否具备良好的扩展性&#xff0c;但也是相对比较难以理解和掌握的&#xff0c;究竟怎样的代码改动才…

显著性分析

选择图 为什么要分Non-parametric & parametric 方法 为了找到更符合数据的分析方法。每个方法有自己的假设&#xff0c;如果违背了结果会不精准。 Sign Test 是一个可以用于任何数据分布情况的pairwise 方法。 检查normality: Sample 数量 < 50,适用 Shapiro-Wilk&am…

ElasticSearch 数据读写

文章目录一、数据模型1.1 PacificA 算法1.2 ES 数据副本模型1.2.1 写入模型1.2.2 读取模型1.2.3 一致性保障二、ES 数据写入2.1 写入详细流程2.1.1 协调节点流程2.1.2 主分片节点流程三、ES 数据读取3.1 GET 流程3.2 Search 流程四、索引恢复一、数据模型 1.1 PacificA 算法 …

vue2[webpack]中接入vue3[vite]的qiankun微前端服务

本文记录在 vue2[webpack]老项目中&#xff0c;使用qiankun.js微前端服务&#xff0c;接入vue3[vite]新项目。 纯vue2[webpack]技术项目可参考以前的文章&#xff1a; vue项目落地(qiankun.js)微前端服务-zhanghaoran’s blog vue2为基座主应用&#xff1b; vue3为子应用。 改造…

2022年学习机器人和人工智能的一些体会

前些日子开会&#xff0c;很受启发&#xff0c;比如有大佬指出&#xff1a; 总结&#xff1a;一般是高屋建瓴&#xff0c;通常是级别高的总揽全局&#xff0c;小虾虾不适用&#xff1b;感想和体会&#xff1a;小虾虾们学习完大佬讲话之后&#xff0c;自己的收获。 这才发现写博…

K8S——调用亲和性

k8s-调度亲和性 简介 Scheduler 是 kubernetes 的调度器&#xff0c;主要的任务是把定义的 pod 分配到集群的节点上。听起来非常简单&#xff0c;但有 很多要考虑的问题&#xff1a; 公平&#xff1a;如何保证每个节点都能被分配资源资源高效利用&#xff1a;集群所有资源最…

37.卷积神经网络(LeNet)的代码实现(在colab上)

ps&#xff1a;在教材上直接打开colab&#xff0c;运行原来的代码!pip install githttps://github.com/d2l-ai/d2l-zhrelease # installing d2l是会报错的&#xff0c;改成这句代码&#xff0c;可以正确运行&#xff1a;!pip install d2l0.14.&#xff0c;直接制定了d2l的版本 …