小白课程,前端入门新手,必须了解的回调函数概念和应用实例

news2024/9/22 9:51:31

******内容预警******新手内容,大佬请绕道

做为一个纯纯的小白,我相信很多人是没有回掉函数这个概念的,虽然很多文档和教程中都有提到,但是很多人看完文档也不会用。因为菜鸟的开发任务,都是简单画一下html页面,实现简单的函数,然后复制粘贴就可以完成,几乎不用回调函数也能满足需求。

其实我们在写简单代码的时候也会用到回调函数,顾名思义,就是回过头来再调用的函数,最最最常见的回调函数,就是我们的事件监听函数。

// 方法一
document.addEventListener("click", function(){
    console.log('点击')
});


// 方法二
function onClick() {
    console.log('click')
}

document.addEventListener("click", onClick);

第一种写法直接写的一个匿名方法,就是一个回调函数,方法二种的 onClick 函数也是回调函数。在监听到document的点击事件后,再回过头来调用一个函数,我们可以总结出来

回调函数 需要 作为参数传递给一个另一个函数

为什么我们很多新手都几乎没用多回调函数呢,因为在写代码中都在尽量避免回调函数的使用,这就是因为存在传说的回调地域的问题。

什么是回调地狱,听起来很可怕,实际上也很可怕。一句话概述就是

回调地狱,是多个回调函数嵌套使用,影响代码的可读性,让开发者仿佛置身地狱

看一下这个例子:

setTimeout(() => {
    // 第一层
    console.log(1)

    setTimeout(() => {
        // 第二层
        console.log(2)

        setTimeout(() => {
           // 第三层
           console.log(3)
        }, 100)
    }, 100)
}, 100)

setTimeout 的使用也是回调函数的一个应用实例,就像这样不断的嵌套,或者和异步请求 Ajax互相嵌套,你看着是不是很苦恼,嵌套层级越来越深,是不是仿佛身处地狱【如果嵌套是100层,你还不觉得像地狱,你肯定是魔鬼👹~~哈哈

但是,你因为害怕进入回调地狱,你就永远把回调函数抛弃,也是不明智的,除了很多常见的事件监听和定时器不可避免的使用回调函数,在自己开发的业务代码中也可以适当的加入,一切都要看你的需求!不要惧怕回调函数,因为我们的很多项目很简单,根本不会嵌套很深,这么说吧,根本就不会嵌套,只要嵌套了我们就不要用,但是只有一层的时候可以用

可以用,但是也可以不用,一层或多层的嵌套我们就要用promsie, async ,await等高级的东西了。

应用实例

在vue3中,

  1. 父组件调用子组件的方法,并传入一个回调函数
  2. 子组件调用父组件传入的回调函数 ,并获取父组件的变量值。

 这虽然是一个没有什么用的例子,但是可以参照这个写法,在子组件中调用父组件的方法,甚至获取父组件的变量值。

以下为源代码

<template>
	<!--我是父组件-->
	<OButton ref="btnEle" @click="ButtonClick"></OButton>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import OButton from './component/OButton.vue'
const btnEle = ref(null)

const name = 'parent'
function clickCallBack() {
	console.log('父组件的名字是', name)
	return name
}

// 点击事件
function ButtonClick() {
	if (btnEle.value) {
		// 子组件的一个函数中传入父组件的函数
		;(btnEle.value as typeof OButton).childButtonClick(clickCallBack)
	}
}
</script>
<style lang="scss"></style>
<template>
	<!--子组件OButton-->
	<button>我是按钮</button>
</template>
<script lang="ts" setup>
function childButtonClick(cb) {
	// 调用回调函数
	const parent = cb()
	// 得到了父组件的属性name
	console.log('子组件的名字是', 'chlid', parent)
}
defineExpose({
	childButtonClick,
})
</script>
<style lang="scss">
button {
	position: fixed;
	left: 100px;
	top: 100px;
}
</style>

 

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

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

相关文章

分布式定时调度:xxl-job 最佳实践详解

文章目录一、定时任务概述1.1. 什么是定时任务1.2. 常见定时任务方案1.3. 分布式定时任务面临的问题1.4. 分布式定时任务xxl-job二、xxl-job架构设计2.1. 设计思想2.2. 架构设计图三、xxl-job安装3.1.下载源码3.2. 导入数据库3.3. 启动调度中心3.4. 配置部署“执行器项目3.5. 案…

护眼灯有用吗?双十二买什么样的护眼灯真的有效果

对于很多人来说&#xff0c;健康是一个越来越重视的话题&#xff0c;特别是现代社会生活节奏很快&#xff0c;很多人的眼睛都吃不消&#xff0c;所以不管是为了好看&#xff0c;还是为了能够看得足够远&#xff0c;都会注意保护眼睛&#xff0c;所以越来越多的人开始考虑护眼台…

网站变灰,6行代码,通通变灰

人狠话不多&#xff0c;直接上代码 -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: grayscale(100%); -o-filter: grayscale(100%); filter: grayscale(100%); filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale1); 通通变灰&…

Java中Map集合体系的基本使用和常用API

文章目录Map集合体系Map集合概述和使用Map集合体系的特点Map集合常用的APIMap集合体系 Map集合概述和使用 Map集合是一种双列集合&#xff0c;每个元素包含两个数据。 Map集合的每个元素的格式&#xff1a;keyvalue(键值对元素)。 Map集合也被称为“键值对集合”。 Map集合整体…

本地代码上传到gitlab

1、在本地代码目录中&#xff0c;鼠标右键Git Bash Here&#xff0c;会打开一个git命令操作窗口&#xff1b; 2、执行git init命令&#xff0c;此命令会在当前目录下创建一个.git文件夹, git init 3、将项目的所有文件添加到仓库中&#xff0c; git add -A 4、将add的文件…

【计算机毕业设计】75.教师工作考核绩效管理系统源码

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 摘 要 随着社会不断进步与发展&#xff0c;生活节奏不断加快&#xff0c;信息已经成为我们生活中不可缺少的一部分&#xff0c;很多学校需要掌握大量的信息来了解特定学生的需求&#xff0c;传统的做法是组织大量的…

如何实现table表头固定但是tbody可以滚动【附源码实例】

【写在前面】经常看到表头固定&#xff0c;表身支持滚动的需求&#xff0c;由于项目经常会用到一些自定义的表格展示数据&#xff0c;之前经常发现每次都是自己去写&#xff0c;自己去重新定义样式&#xff0c;觉得特别的麻烦&#xff0c;现在我特针对这类的分享一下。 1、页面…

【电巢】新能源产业景气度加速向上,功率器件3000亿赛道国产替代已在路上!(附70+厂家名单部分厂家替代型号)

前言 目前消费电子疲软继续蔓延&#xff0c;半导体设计端分化明显&#xff0c;存储、CPU等产品需求延续弱势&#xff0c;但IGBT和SiC等功率器件逐步迎来收获期。半导体周期拐点已至&#xff0c;曙光乍现。 在整个半导体周期背景下&#xff0c;新能源汽车俨然已成为逆势窗口产业…

现在健身耳机哪个牌子好、2023年最好的健身房耳机推荐

很多朋友在运动健身的时候喜欢戴上耳机&#xff0c;在音乐的节奏中去运动&#xff0c;现在市面上的运动耳机选择也特别丰富&#xff0c;但是说实话&#xff0c;从专业角度来看能真正适合运动的蓝牙耳机其实还是比较罕见的。这也就导致了我们许多朋友在选购时特别容易踩坑&#…

React - redux 使用(由浅入深)

React - redux 使用&#xff08;由浅入深&#xff09;一. redux理解1. redux 介绍2. redux 使用情况3. redux 工作流程4. redux 三个核心概念4.1 Action4.2 Store4.3 Reducers5. redux 核心API5.1 createStore()5.2 Store5.2.1 Store 方法5.2.1.1 getState()5.2.1.2 dispatch(a…

Kotlin 开发Android app(十八):线程Thread和UI更新

多线程的好处是不言而喻的&#xff0c;它能帮我们刚更多的事情&#xff0c;同时干不同的事情在程序设计中是经常出现的&#xff0c;这种时候我们使用的是线程。 在Kotlin 中&#xff0c;使用的还是原先java 的那一套&#xff0c;用的还是Thread &#xff0c;可能是在java 中T…

翻译: 如何学习编译器:LLVM Edition

编译器和编程语言是一个很大的话题。您不能只选择学习路径并在某个时候完成它。有许多不同的区域&#xff0c;每个区域都是无穷无尽的。 在这里&#xff0c;我想分享一些有助于学习编译器的链接。这份清单不可能详尽无遗——每个人都很忙&#xff0c;没有人有时间阅读龙书。 …

前端知识大全之CSS

目录 一、概念讲解 学习CSS之前必学的HTML &#xff08;超链接&#xff09; 二、正文代码 1.行内样式 2.内部样式&#xff08;选择器&#xff09; 3.外部样式 4.样式的优先级 5.简单选择器之定义单个标签&#xff08;id&#xff09; 6.简单选择器之定义多个标签&#xff…

低代码平台,企业业务创新的最佳路径

数字化转型的必然趋势及面临的问题 数字经济时代&#xff0c;数字化转型是企业在行业赛道上领先的必经之路&#xff0c;然而&#xff0c;数字化转型升级的道路并不是畅通无阻的&#xff0c;也不是企业单枪匹马就能干成的&#xff0c;各个企业在转型过程中都或多或少会遇到技术…

MySQL-索引

一、介绍 索引是数据库对象之一&#xff0c;用于提高字段检索效率&#xff0c;使用者只需要对哪个表中哪些字段建立索引即可&#xff0c;其余什么都不做&#xff0c;数据库会自行处理。 索引提供指向存储在表的指定列中的数据值的指针&#xff0c;如同图书的目录&#xff0c;…

【MMDetection】MMDetection中AnchorGenerator学习笔记

文章目录初始化-AnchorGenerator()Anchor平移-grid_priors计算有效anchor-valid_flags参考文献初始化-AnchorGenerator() TASK_UTILS.register_module() class AnchorGenerator:def __init__(self, strides, ratios, scalesNone, base_sizesNone, scale_majorTrue, octave_bas…

numpy的部分通用函数浅谈

numpy的部分通用函数 1.数组算术运算符 运算符对应的通用函数描述np.add加法运算&#xff08;即112)-np.substract减法运算&#xff08;即3-21&#xff09;-np.negative负数运算&#xff08;即-2&#xff09;*Nnp.multiply乘法运算&#xff08;即2*36&#xff09;/np.divide除…

Optional用法与争议点

Optional用法与争议点 简介 要说Java中什么异常最容易出现&#xff0c;我想NullPointerException一定当仁不让&#xff0c;为了解决这种null值判断问题&#xff0c;Java8中提供了一个新的工具类Optional&#xff0c;用于提示程序员注意null值&#xff0c;并在特定场景中简化代…

软件测试8年,却被应届生踩在头上,是应届生太牛了,还是我们太弱了?

前几天有个朋友向我哭诉&#xff0c;说他在公司干了8年的软件测试&#xff0c;却被一个实习生代替了&#xff0c;该何去何从? 这是一个值得深思的问题&#xff0c;作为职场人员&#xff0c;我们确实该思考&#xff0c;我们的工作会被实习生代替吗?这是一个很尖锐的问题&…

MFC基于对话框——仿照Windows计算器制作C++简易计算器

目录 一、界面设计 二、设置成员变量 三、初始化成员变量 四、初始化对话框 ​五、添加控件代码 1.各个数字的代码&#xff08;0~9&#xff09; 2.清除功能的代码 3.退格功能的代码 4.加减乘除功能的代码 5.小数点功能的代码 6.正负号功能的代码 7.等于功能的代码…