~~~
### 函数(function)
> 一个处理事情的方法,例如:洗衣机就是一个函数
1.生产洗衣机
- 把洗衣服的操作的集成在一起
- 相当于一个函数:函数的目的就是把实现一个功能的代码进行封装,
以后再想实现这个功能,我们只需要执行方法即可,
无需再把代码写一遍 => “低耦合、高内聚”:减少页面中的冗余代码,提高代码的重复使用率
2.让洗衣机运行
- 执行函数
- 函数两部分:定义函数、执行函数(光定义函数是没有用的,只有把函数执行,才能起到对应的作用)
~~~
~~~
/*
* 1.创建函数:把实现某个功能的代码封装在一起
* function 函数名(形参1,...){
* //=>函数体:实现具体功能的代码
* }
*
* 2.执行函数:让函数执行,从而实现具体的功能
* 函数名(实参1,...);
* 函数名(实参1,...);
* ...
* 函数的意义在于封装:把实现某一个功能的代码封装在一起,后期再想实现这个功能,只需要执行函数即可,不需要重新编写这些代码了 “低耦合、高内聚”
*/
let time1 = '2020/03/07 11:37:00';
let arr = time1.match(/\d+/g);
time1 = '{0}年{1}月{2}日'.replace(/\{(\d+)\}/g, (_, num) => {
return arr[num];
});
console.log(time1);
let time2 = "1998-12-18 00:00:00"; //=>"12-18 00:00"
let arr2 = time2.match(/\d+/g);
time2 = '{1}-{2} {3}:{4}'.replace(/\{(\d+)\}/g, (_, num) => {
return arr2[num];
});
console.log(time2);
// .... */
// 创建一个函数(创建一个洗衣机):把时间格式化的操作全部封装成为一个函数,代码统一封装起来
function formatTime(time, templete = "{0}年{1}月{2}日 {3}时{4}分{5}秒") {
let timeAry = time.match(/\d+/g);
return templete.replace(/\{(\d+)\}/g, (...[, $1]) => {
let time = timeAry[$1] || "00";
return time.length < 2 ? "0" + time : time;
});
}
// 执行函数(运行洗衣机)
let time1 = '2020/03/07 11:37:00';
let time2 = "1998-12-18 00:00:00";
console.log(formatTime(time1, '{0}年{1}月{2}日'));
console.log(formatTime(time2, '{1}-{2} {3}:{4}'));
console.log(formatTime(time1)); */
// 项目中,发现一个功能要重新运行两次及两次以上,此时我们就把这个功能封装成为一个函数,以后再想实现这个功能,直接把函数执行即可/* // 1.创建函数
function func() {
console.log('我会玩函数了!');
}
// 2.执行函数
func();
func();
// ================================求两个数的和
// 函数中有一个形参和实参的概念
// 形参:生产一个函数,想要实现一些功能,但是实现功能,需要的原材料不确定,需要用户执行它的是够给我,我才知道,此时我们就提供入口 => 形参(变量)
// 实参:执行函数的时候,给指定的入口(形参变量)传递的具体值(值)
function sum(x, y) {
// 创建函数的时候,并不知道要求哪两个数字的和,此时可以定义形参变量
// =>x和y就是形参变量
let total = x + y;
console.log(total);
}
sum(10, 20); //=>x=10 y=20是实参(给形参变量传递的具体值)
sum(1, 10); //=>x=1 y=10
sum(10); //=>x=10 y=undefined 定义了形参,但是执行的时候不给传递实参,则形参默认值undefined ->NaN
~~~
![](https://img.kancloud.cn/d0/38/d038175fb8446ecb6566d96119ec3a84_200x46.png)
- 0001.开课说明
- 0002.ECMAScript的发展历程
- 0003.WEB2.0时代-服务器端渲染,前后端不分离
- 0004.WEB2.0时代-前后端分离模式
- 0005.大前端时代概述
- 0006.前端需要的技术栈和学习技巧
- 0007.浏览器
- 0008.JS的三部分组成
- 0009.JS中创建变量的6种形式
- 0010.JS中变量的命名规范
- 0011.JS中的数据类型分类
- 0012.JS中常用的几种输出方式
- 0013.number属性类型详细解读1
- 0014.number数据类型详细解读2
- 0015.string数据类型详细解读1
- 0016.string数据类型详细解读2
- 0017.boolean数据类型详细解读
- 0018.object数据类型详细解读1
- 0019.object数据类型详细解读2
- 0020.谈谈学习
- 0021.数据类型检测
- 0022.浏览器底层渲染机制(堆栈内存和数据类型区别)
- 0023.关于数据类型区别的面试题
- 0024.课后作业讲解:数据类型转换
- 0025.课后作业讲解:堆栈内存处理
- 0026.课后作业讲解:阿里的一道经典面试题
- 0027.JS中三种常用的判断语句
- 0028.小实战:开关灯特效
- 0029.FOR循环和FOR IN循环
- 0030.课后作业讲解:关于循环判断和数据转化
- 0031.课后作业讲解:关于DOM对象的深入理解
- 0032.关于元素集合的相关操作(奇偶行变色)
- 0033.课后作业讲解:逻辑思维判断题
- reset.min.css
- 0034.(复习)前四天内容的综合复习梳理
- 0035.初窥函数:函数的作用、语法、形参
- 0036-0038.选项卡案例
- 0039.隔行变色案例:进一步强化自定义属性编程思想
- 0040.其它作业题的讲解(自定义属性强化)
- 0041.函数创建和执行的堆栈运行机制
- 0042.函数中的形参和实参
- 0043.函数中的实参集合ARGUMENTS
- 0044.函数中的返回值RETURN
- 0045.箭头函数和匿名函数
- 0046.两个等于比较时候的数据类型转换规则
- 0047.数组的基础结构和常规操作
- 0048.数组常用方法:增删改的五个方法
- 0049.数组常用方法:查询、拼接、转换为字符串
- 0050.数组常用方法:检测是否包含、排序和迭代
- 0051.数组去重:双FOR循环(数组塌陷和SPLICE删除优化)
- 0052.数组去重:对象键值对方式(ES6中SET)
- 0053.Math数学函数对象中常用的方法
- 0054.String字符串中常用的方法
- 0055.实战案例:时间字符串格式化
- 0056.实战案例:queryURLParams1
- 0057.实战案例:queryURLParams2
- 0058.实战案例:获取四位不重复的验证码
- 0059.阶段作业题讲解1(基础知识)
- 0060.阶段作业题讲解2(实战案例)
- 0061-0062.DOM操作中相关知识的复习
- 0063.DOM中的节点操作1
- 0064.DOM中的节点操作2
- utils
- 65.关于DOM的增删改