五、Vue模块化开发学习笔记——JavaScript原始功能、匿名函数的解决方案、使用模块作为出口、CommonJS、ES6 export和import的使用

一、JavaScript原始功能

-在网页开发的早期,js制作作为一种脚本语言,做一些简单的表单验证或动画实现等,那个时候代码还是很少的。 那个时候的代码是怎么写的呢?
直接将代码写在<script>标签中即可

随着ajax异步请求的出现,慢慢形成了前后端的分离 客户端需要完成的事情越来越多,代码量也是与日俱增。
为了应对代码量的剧增,我们通常会将代码组织在多个js文件中,进行维护。 但是这种维护方式,依然不能避免一些灾难性的问题。
比如全局变量同名问题:看下边的例子
在这里插入图片描述
另外,这种代码的编写方式对js文件的依赖顺序几乎是强制性的
但是当js文件过多,比如有几十个的时候,弄清楚它们的顺序是一件比较同时的事情。
而且即使你弄清楚顺序了,也不能避免上面出现的这种尴尬问题的发生。

二、匿名函数的解决方案

我们可以使用匿名函数来解决方面的重名问题
在aaa.js文件中,我们使用匿名函数
在这里插入图片描述
但是如果我们希望在main.js文件中,用到flag,应该如何处理呢?
显然,另外一个文件中不容易使用,因为flag是一个局部变量。

三、使用模块作为出口

我们可以使用将需要暴露到外面的变量,使用一个模块作为出口,什么意思呢?
来看下对应的代码:

在这里插入图片描述

我们做了什么事情呢?
非常简单,在匿名函数内部,定义一个对象。
给对象添加各种需要暴露到外面的属性和方法(不需要暴露的直接定义即可)。
最后将这个对象返回,并且在外面使用了一个MoudleA接受。

接下来,我们在man.js中怎么使用呢?
我们只需要使用属于自己模块的属性和方法即可
在这里插入图片描述
这就是模块最基础的封装,事实上模块的封装还有很多高级的话题:

  • 但是我们这里就是要认识一下为什么需要模块,以及模块的原始雏形。
  • 幸运的是,前端模块化开发已经有了很多既有的规范,以及对应的实现方案。
  • 常见的模块化规范:
    CommonJS、AMD、CMD,也有ES6的Modules

四、CommonJS(了解)

模块化有两个核心:导出和导入

  • CommonJS的导出:
    在这里插入图片描述
  • CommonJS的导入:
    在这里插入图片描述

五、ES6 export基本使用

  1. export指令用于导出变量,比如下面的代码:
    在这里插入图片描述
    上面的代码还有另外一种写法:
    在这里插入图片描述
  2. 上面我们主要是输出变量,也可以输出函数或者输出类:
    上面的代码也可以写成这种形式:
    在这里插入图片描述
    在这里插入图片描述
  3. export default
    某些情况下,一个模块中包含某个的功能,我们并不希望给这个功能命名,而且让导入者可以自己来命名
  • 这个时候就可以使用export default
    在这里插入图片描述
    我们来到main.js中,这样使用就可以了
    这里的myFunc是我自己命名的,你可以根据需要命名它对应的名字
    在这里插入图片描述
    另外,需要注意:
    export default在同一个模块中,不允许同时存在多个。

六、ES6 import使用

我们使用export指令导出了模块对外提供的接口,下面我们就可以通过import命令来加载对应的这个模块了

  • 首先,我们需要在HTML代码中引入两个js文件,并且类型需要设置为module
    在这里插入图片描述
  • import指令用于导入模块中的内容,比如main.js的代码:
    在这里插入图片描述
  • 如果我们希望某个模块中所有的信息都导入,一个个导入显然有些麻烦:
  1. 通过*可以导入模块中所有的export变量
  2. 但是通常情况下我们需要给*起一个别名,方便后续的使用
    在这里插入图片描述
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><script src="aaa.js" type="module"></script>
<script src="bbb.js" type="module"></script>
<script src="mmm.js" type="module"></script>
</body>
</html>
var name = '小明'
var age = 18
var flag = truefunction sum(num1,num2) {return num1 + num2
}if (flag) {console.log(sum(20, 30));
}// 1.导出方式一
export {flag,sum
}// 2.导出方式二
export var num1 = 1000;
export var height = 188;// 3.导出函数/类
export function mul(num1, num2) {return num1 + num2;
}export class Person {run() {console.log('在奔跑');}
}// 5.export default
/*
const address = '深圳市'
export {address
} *//*export const address = '北京市'*//*
const address = '深圳市'
export default address*/export default function (argument) {console.log(argument);
}
// 1.导入{}中定义的变量
import {flag,sum} from "./aaa.js";if (flag) {console.log('小明是天才');console.log(sum(10,20));
}// 2.直接导入export定义的变量
import {num1,height} from "./aaa.js";console.log(height);
console.log(num1);// 3.导入 export的function
import {mul, Person} from "./aaa.js";console.log(mul(30, 50));const p = new Person();
p.run();/*import addr from "./aaa.js"
console.log(addr)*/// 4.导入export default中的内容
import arg from "./aaa.js"
arg("你好啊")// 5.统一全部导入
/*
import {flag,num,num1,height,Person,mul,sum} from "./aaa.js"
*/import * as aaa from './aaa.js'
console.log(aaa.flag)
console.log(aaa.height)
var name = '小红'
var flag = false

在这里插入图片描述

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

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

相关文章

LeetCode 2333. 最小差值平方和(贪心)

文章目录1. 题目2. 解题1. 题目 给你两个下标从 0 开始的整数数组 nums1 和 nums2 &#xff0c;长度为 n 。 数组 nums1 和 nums2 的 差值平方和 定义为所有满足 0 < i < n 的 (nums1[i] - nums2[i])^2 之和。 同时给你两个正整数 k1 和 k2 。你可以将 nums1 中的任意…

[na][tools]快速ping网段工具-QuickPing

一款神器 quickping 能够很快的探测出该网断分出去哪些地址. 在线的会显示绿色 在线的有主机名的显示为亮绿色 转载于:https://www.cnblogs.com/iiiiher/p/5362403.html

六、Webpack详解学习笔记——webpack的安装、起步、配置、loader的使用、webpack中配置Vue、plugin的使用、搭建本地服务器、webpack配置的分离

一、认识webpack 什么是webpack&#xff1f; 这个webpack还真不是一两句话可以说清楚的。我们先看看官方的解释&#xff1a; At its core, webpack is a static module bundler for modern JavaScript applications.从本质上来讲&#xff0c;webpack是一个现代的JavaScript应用…

LeetCode 2349. 设计数字容器系统(SortedSet)

文章目录1. 题目2. 解题1. 题目 设计一个数字容器系统&#xff0c;可以实现以下功能&#xff1a; 在系统中给定下标处 插入 或者 替换 一个数字。 返回 系统中 给定数字 的最小下标。 请你实现一个 NumberContainers 类&#xff1a; NumberContainers() 初始化数字容器系统…

七、Vue cli详解学习笔记——什么是Vue cli ,Vue cli的使用(安装,拉取2.x模板,初始化项目),Vue cli2详解,Runtime-Compiler和Runtime-only区别

一、什么是Vue CLI 如果你只是简单写几个Vue的Demo程序, 那么你不需要Vue CLI. 如果你在开发大型项目, 那么你需要, 并且必然需要使用Vue CLI 使用Vue.js开发大型应用时&#xff0c;我们需要考虑代码目录结构、项目结构和部署、热加载、代码单元测试等事情。如果每个项目都要手…

我们

我们的 转载于:https://www.cnblogs.com/xxzhou/p/5364606.html

LeetCode 2343. 裁剪数字后查询第 K 小的数字

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的字符串数组 nums &#xff0c;其中每个字符串 长度相等 且只包含数字。 再给你一个下标从 0 开始的二维整数数组 queries &#xff0c;其中 queries[i] [ki, trimi] 。对于每个 queries[i] &#xff0c;你需要&#x…

八、Vue cli3详解学习笔记

一、认识Vue CLI3 1.1 vue-cli 3 与 2 版本有很大区别&#xff1a; vue-cli 3 是基于 webpack 4 打造&#xff0c;vue-cli 2 还是 webapck 3vue-cli 3 的设计原则是“0配置”&#xff0c;移除的配置文件根目录下的&#xff0c;build和config等目录vue-cli 3 提供了 vue ui 命…

LeetCode 1947. 最大兼容性评分和(状态枚举DP)

文章目录1. 题目2. 解题1. 题目 有一份由 n 个问题组成的调查问卷&#xff0c;每个问题的答案要么是 0&#xff08;no&#xff0c;否&#xff09;&#xff0c;要么是 1&#xff08;yes&#xff0c;是&#xff09;。 这份调查问卷被分发给 m 名学生和 m 名导师&#xff0c;学生…

pydev debugger: warning: trying to add breakpoint to file that does not exist: /tmp/xxx

pycharm 在本地&#xff0c;连接远程进行 debug&#xff0c;发现报错 pydev debugger: warning: trying to add breakpoint to file that does not exist: /tmp/EPeOxSnjcK/参考过 https://blog.csdn.net/AAliuxiaolei/article/details/122792931 但是不行。 也试过清除缓存 I…

十、vue-router学习笔记——认识路由、vue-router基本使用、vue-router嵌套路由、vue-router参数传递、vue-router导航守卫、keep-alive

一、认识路由 1.1 什么是路由&#xff1f; 说起路由你想起了什么&#xff1f; 路由是一个网络工程里面的术语。 路由&#xff08;routing&#xff09;就是通过互联的网络把信息从源地址传输到目的地址的活动. — 维基百科 额, 啥玩意? 没听懂 在生活中, 我们有没有听说过路由…

python 基准测试(cProfile \ kcachegrind \ line_profiler \ memory_profiler)

learn from 《Python高性能&#xff08;第2版&#xff09;》 类似工具&#xff1a;pycharm profile对函数调用效率进行测试 1. 例子 一个圆周运动的动画 from matplotlib import pyplot as plt from matplotlib import animation from random import uniform import timeit…

纯粹的python优化(数据结构、cache、推导、生成器)

learn from 《Python高性能&#xff08;第2版&#xff09;》 1. 数据结构与算法 列表、双端队列 list 底层是数组&#xff0c;在 开头 插入和删除的时间复杂度 O(n)&#xff0c; 在结尾插入和删除是 O(1)&#xff0c;访问任意元素是 O(1)deque 底层是 双向链表实现&#xff…

解决在vue init webpack my-project卡住的问题(已解决)

执行vue init webpack test命令&#xff1a; 然后cd test&#xff0c;然后cnpm install 或者 npm install --registryhttps://registry.npm.taobao.org 然后执行 npm run dev命令&#xff1a;

十一、案例:TabBar的封装

0、案例效果演示&#xff1a; 一、TabBar实现思路 如果在下方有一个单独的TabBar组件&#xff0c;你如何封装 自定义TabBar组件&#xff0c;在APP中使用 让TabBar出于底部&#xff0c;并且设置相关的样式 TabBar中显示的内容由外界决定 定义插槽 flex布局平分TabBar 自定义Ta…

POJ 3126 Prime Path

水题&#xff1a;直接判断素数bfs 1 #include <iostream>2 #include <cstdio>3 #include <cstring>4 #include <sstream>5 #include <algorithm>6 #include <list>7 #include <map>8 #include <vector>9 #include <queue&g…

十二、Promise的学习笔记(Promise的基本使用、链式编程、all())

一、认识Promise ES6中一个非常重要和好用的特性就是Promise 但是初次接触Promise会一脸懵逼&#xff0c;这TM是什么东西&#xff1f;看看官方或者一些文章对它的介绍和用法&#xff0c;也是一头雾水。 Promise到底是做什么的呢&#xff1f; Promise是异步编程的一种解决方…

十三、Vuex学习笔记

一、Vuex是做什么的? 官方解释&#xff1a;Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。 它采用 集中式存储管理 应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension&#xf…

SQL Server2008附加数据库失败

今天旁晚时分&#xff0c;我准备把老师在上课时候发给我们的一个数据库附加到我的SQL Server2008上面去&#xff0c;本来在学校机房用的SQL Server2000是很顺利地就成功了&#xff0c;但是把*.mdf文件附加到我的08上就不行了&#xff0c;出现了下面的问题&#xff08;图是我 百…

数据解析学习笔记(正则解析、bs4解析、xpath解析)

聚焦爬虫:爬取页面中指定的页面内容。 - 编码流程&#xff1a; - 指定url - 发起请求 - 获取响应数据 - 数据解析 - 持久化存储 数据解析分类&#xff1a; 正则bs4xpath&#xff08;***&#xff09; 数据解析原理概述&#xff1a; - 解析的局部的文本内容都会在标签之间或者标…