Node与ES6模块

 模块化的作用主要体现在封装和隐藏私有实现细节,以及保证全局命名空间清洁上,因而模块之间不会意外修改各自定义的变量、函数和类。

1 模块

1.1 代码打包工具基本工作原理

在函数中声明的局部变量和嵌套函数都是函数私有的。这意味着我们可以使用立即调用的函数表达式来实现某种模块化,把实现细节和辅助函数隐藏在包装函数中,只将模块的公共API作为函数的值返回。

const moduleExport = (function () {
    function sayHello() {
        console.log("hello moduleExport")
    }

    function sum(a,b) {
        console.log(a + "+" + b + "=" + (a + b))
    }

    return { sayHello, sum }
}());

moduleExport.sayHello(); // hello moduleExport
moduleExport.sum(5,8); // 5+8=13

打包工具把每个文件的内容包装在一个立即调用的函数表达式中,还可以跟踪每个函数的返回值,并将所有内容拼接为一个大文件:

const modules = {};

function requireCustom(moduleName) { return modules[moduleName] }

modules["student.js"] = (function () {
   const exports = {};
   // student.js 内容
    function study() {
        console.log("好好学习天天向上");
    }
    // student.js 内容截止
    exports.study = study;
   return exports;
}());

modules["teacher.js"] = (function () {
  const exports = {};
  function teach() {
      console.log("教授英语");
  }
  function test() {
      console.log("今天考试");
  }
  exports.teach = teach;
  exports.test = test;
  return exports;
}());

const student = requireCustom("student.js");
student.study(); // 好好学习天天向上
const teacher = requireCustom("teacher.js");
teacher.teach(); // 教授英语
teacher.test(); // 今天考试

以上代码展示了浏览器代码打包工具(webpack)的基本原理,也是对Node程序中使用的require()函数的一个简单介绍。

1.2 Node中的模块

在Node模块中,每个文件都是一个拥有私有命名空间的独立模块。在一个文件中定义的常量、变量、函数和类对该文件而言都是私有的,除非该文件会导出它们。而模块导出值只有被另一个模块显式导入后才会在该模块中可见。

Node使用require()函数导入其他模块,通过设置Exports对象属性或完全替换module.exports对象来导出公共API。

function product() {
    console.log("生产商品");
}

function design() {
    console.log("设计商品");
}

module.exports = { product, design };

factory.js

module.exports = function () {
    console.log("消费商品")
};

customer.js

const factory = require("./factory");
const customer = require("./customer");

factory.design(); // 设计商品
factory.product(); // 生产商品
customer(); // 消费商品

shop.js

1.3 ES6中的模块

ES6模块化与Node的模块化在概念上是相同的。与Node模块的区别在于导入和导出所用的语法,以及浏览器中定义模块的方式。

要从ES6模块导出,只要在声明前加上export关键字即可。导入其他模块要使用import关键字。

function work() {
    console.log("努力工作");
}

function fished() {
    console.log("偶尔摸鱼");
}

export { work, fished }

employee.js

export default function () {
    console.log("发薪水");
}

boss.js

export { work, fished  } from "./employee.js";
export { default as payByBoss } from "./boss.js";
console.log(import.meta.url); // http://localhost:63342/js-study/day2/company.js

company.js

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>公司</title>
</head>
<body>
<script type="module">
    import { work, fished, payByBoss }  from "./company.js";
    work(); // 努力工作
    fished(); // 偶尔摸鱼
    payByBoss(); // 发薪水
</script>
</body>
</html>

company.html

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

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

相关文章

林沛满---一个面试建议

在应聘一个技术职位之前&#xff0c;做好充分的准备无疑能大大提高成功率。这里所说的准备并不是指押题&#xff0c;因为有经验的面试官往往准备了海量的题库&#xff0c;押中的概率太低。比如我有位同事的题库里有上百道题&#xff0c;内容涵盖了编程、操作系统、网络、存储……

Unity MRTK Hololens2眼动交互

/** ** UnityVersion : 2021.3.6f1* Description : 眼部交互基类* Author: * CreateTime : 2023-10-11 09:43:20* Version : V1.0.0* * */using System.Collections.Generic; using Microsoft.MixedReality.Toolkit.Input; using UnityEngine;namespace MRTKExtend.EyeTrackin…

神秘的锦衣卫

在看明朝电视剧经常听到的一句台词&#xff1a;锦衣卫办案&#xff0c;闲杂人等速速离开。锦衣卫是明朝特务机构&#xff0c;直接听命于皇帝&#xff0c;是亲军卫之一&#xff0c;也是最重要的一卫。 1、卫所制 卫所制是明代最主要的军事制度&#xff0c;其目标是寓兵于农、屯…

RISC-V 架构寄存器规范

a0 - a7&#xff08; x10 - x17 &#xff09; 调用者保存&#xff0c;用来传递输入参数。其中的 a0 和 a1 还用来保存返回值 t0 - 6( x5 - x7, x28 - x31 ) 调用者保存&#xff0c;作为临时寄存器使用&#xff0c;在被调函数中可以随意使用无需保存 s0 - s11( x8 - x9, x18…

React 状态管理 - Context API 前世今生(下)

New Context API Provider【context的生产者组件】 createContext 创建一个Context对象&#xff0c;订阅了整个Context对象的组件&#xff0c;会从组件树中离自身最近的那个匹配的Provider中读取到当前的context值。Context.Provider 父Context对象返回的Provider组件&#x…

22字符串-简单反转

目录 BM&#xff08;Boyer-Moore&#xff09; 坏字符 好后缀 什么情况用哪个规则&#xff1f; LeetCode之路——151. 反转字符串中的单词 分析: 字符串匹配中除了简单的BF&#xff08;Brute Force&#xff09;、RK&#xff08;Rabin-Karp&#xff09;算法&#xff0c;还有…

PHP Discord获取频道消息功能实现

PHP Discord获取频道消息功能实现 1. 关注对应频道2. 添加机器人3. 配置机器人权限4. 使用 DiscordPHP 类库5. 代码示例 (Laravel 框架)6. 服务器部署 1. 关注对应频道 首先要创建自己的频道, 然后到对应的公告频道中关注这个频道(这时 Discord 会让你选择频道, 选择之前创建的…

(n, 0)维NumPy数组 和 (n, 1)维NumPy数组 有什么区别?

(n, 0) 维NumPy数组和 (n, 1) 维NumPy数组之间有一个重要的区别&#xff0c;这涉及到数组的维度和形状&#xff1a; (n, 0) 维NumPy数组&#xff1a; 这是一个具有 n 行和 0 列的数组。在 NumPy 中&#xff0c;这实际上是一个一维数组&#xff0c;但它有 n 个元素&#xff0c;其…

区块链游戏的开发框架

链游&#xff08;Blockchain Games&#xff09;是基于区块链技术构建的游戏。它们与传统游戏有一些显著不同之处&#xff0c;因此需要特定的开发框架和工具。以下是一些用于链游开发的开发框架及其特点&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专…

基于STM32_DS18B20单总线传感器驱动

基于STM32_DS18B20单总线传感器驱动 文章目录 基于STM32_DS18B20单总线传感器驱动前言一、BS18B20&#xff1f;二、原理1.复位与检验2.基本命令3.唯一ROM识别码4.温度转换 三、驱动代码四、注意事项 前言 本文以一款典型的单总线传感器及其驱动——DS18B20为例&#xff0c;简单…

vue学习-15vue全局路由守卫

在vue.js中&#xff0c;提供三种全局守卫&#xff0c;英文称作&#xff08;Global Navigation Guards&#xff09;&#xff0c;这些守卫允许你在路由发生变化的时候执行的一些操作&#xff0c;例如身份验证&#xff0c;日志纪录或者路由跳转控制&#xff0c;全局路由守卫包含以…

【DevOps】DevOps—基本概念

文章目录 1. DevOps2. CI/CD 1. DevOps 维基百科定义&#xff1a; DevOps是一组过程、方法与系统的统称&#xff0c;用于促进 开发、技术运营 和 质量保障&#xff08;QA&#xff09; 部门之间的沟通、协作与整合。我理解DevOps是一种软件管理思维模式。 为什么会有DevOps呢&…

《UnityShader入门精要》学习2

UnityShader 基础 UnityShader 概述 一对好兄弟&#xff1a;材质和UnityShader 总体来说&#xff0c;在Unity中我们需要配合使用材质&#xff08;Material&#xff09;和Unity Shader才能达到需要的效果。一个最常见的流程是&#xff1a; &#xff08;1&#xff09;创建一个…

ts内置对象有哪些有什么作用

TS内置对象是指在TypeScript中自带的一些对象&#xff0c;可以直接使用而不需要导入或安装。一些常见的TS内置对象包括&#xff1a; Math&#xff1a;提供了一些常用的数学函数&#xff0c;例如sin、cos、sqrt等。 Date&#xff1a;提供了日期和时间的相关功能&#xff0c;例如…

(5)SpringMVC处理携带JSON格式(“key“:value)请求数据的Ajax请求

SpringMVC处理Ajax 参考文章数据交换的常见格式,如JSON格式和XML格式 请求参数的携带方式 浏览器发送到服务器的请求参数有namevalue&...(键值对)和{key:value,...}(json对象)两种格式 URL请求和表单的GET请求会将请求参数以键值对的格式拼接到请求地址后面form表单的P…

【深度学习】UniControl 一个统一的扩散模型用于可控的野外视觉生成

论文&#xff1a;https://arxiv.org/abs/2305.11147 代码&#xff1a;https://github.com/salesforce/UniControl#data-preparation docker快速部署&#xff1a;https://qq742971636.blog.csdn.net/article/details/133129146 文章目录 AbstractIntroductionRelated WorksUniCo…

【Linux】HTTPS协议

文章目录 &#x1f4d6; 前言1. 引入https协议2. 常见的加密方式2.1 对称加密&#xff1a;2.2 非对称加密&#xff1a;2.3 数据摘要&&数据指纹&#xff1a; 3. 对加密方式的探究3.1 只使用对称加密&#xff1a;3.2 只使用非对称加密&#xff1a;3.3 双方都使用非对称加…

SQL和Python,哪个更容易自学?哪个更适合数据工作的编程新手?

如果你想从事数据工作&#xff0c;比如数据分析、数据开发、数据科学等&#xff0c;你可能会遇到这样的问题&#xff1a;SQL和Python哪个更容易自学&#xff1f;哪个更有用&#xff1f;哪个更有前途&#xff1f;其实这两种语言都是数据工作的重要技能&#xff0c;但它们的特点和…

vue拦截器是什么,如何使用

Vue拦截器是一种用来拦截并处理HTTP请求和响应的机制&#xff0c;它可以在请求或响应发送前或后进行一些预处理或处理。在Vue中&#xff0c;可以使用axios库来实现拦截器&#xff0c;axios库是一个基于Promise的HTTP客户端&#xff0c;可以用于浏览器和Node.js平台。 使用axio…

计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度(matlab代码)

目录 1 主要内容 系统结构 CCPP-P2G-燃气机组子系统 非线性处理缺陷 2 部分代码 3 程序结果 4 程序链接 1 主要内容 该程序参考《计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度》模型&#xff0c;主要实现的是计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度…