js回调函数原理与用法案例分析


Posted in Javascript onMarch 04, 2020

本文实例讲述了js回调函数原理与用法。分享给大家供大家参考,具体如下:

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

函数指针是指向函数的指针变量。 因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。

函数指针有两个用途:调用函数和做函数的参数。

作用:

js代码会至上而下一条线执行下去,但是有时候我们需要等到一个操作结束之后再进行下一个操作,这时候就需要用到回调函数。

基本案例:

<script language="javascript" type="text/javascript">
function doSomething(callback) {
  // 调用回调函数
  callback('我', '网名', '叶落森');
}
function foo(a, b, c) {
  //这是回调函数
  alert(a + " " + b + " " + c);
}
doSomething(foo);
</script>

项目中的案例:

vue项目中假设store中this指向没指向到vue,那么就可以用回调函数来实现它的iview的this.$Message效果。(当然这是很傻的。this指向没指向到vue,我们可以把vue引进store后,再new Vue()就行。import Vue from 'vue'      var vuethis=new Vue())

a.js

import {mapActions, mapGetters} from 'vuex';
export default {
  name: 'role',
  data () {
    return {

    };
  },
  computed: {},
  methods: {
    ...mapActions(['getRoleData', 'getPowerData']),
      callbackFn(type,content){//这是回调函数
        if(type){
          this.$Message.success(content)
        }else{
          this.$Message.error({
            content: content,
            duration: 5
          })
        }
      },
      initRoleId () {
         this.getRoleData({path:'http://www.baidu.com/',callbackFn:this.callbackFn});
      }
  },
  mounted(){
    this.initRoleId();
  }
};

store中的js

actions: {
    getRoleData ({commit}, {path,callbackFn}) {
      axios.get(path + 'roles', {params: {pageSize: 500}}).then(res => {
        if(res.data.retCode=="200"){
          commit('ROLE_DATA', {roleData: res.data.data.records});
        }else{
          callbackFn(0,res.data.message)//调用回调函数
        }
      });
    },
}

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容可查看本站专题:《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
jquery插件jbox使用iframe关闭问题
Feb 09 Javascript
使用jQuery的将桌面应用程序引入浏览器
Nov 19 Javascript
无刷新预览所选择的图片示例代码
Apr 02 Javascript
关于js里的this关键字的理解
Aug 17 Javascript
jQuery实现的经典竖向伸缩菜单效果代码
Sep 24 Javascript
ECHO.js 纯javascript轻量级延迟加载的实例代码
May 24 Javascript
vue解决使用webpack打包后keep-alive不生效的方法
Sep 01 Javascript
vue中前进刷新、后退缓存用户浏览数据和浏览位置的实例讲解
Sep 21 Javascript
vue实现拖拽效果
Dec 23 Javascript
Vue实现剪切板图片压缩功能
Feb 04 Javascript
JavaScript常用工具函数库汇总
Sep 17 Javascript
vue $mount 和 el的区别说明
Sep 11 Javascript
在pycharm中开发vue的方法步骤
Mar 04 #Javascript
Vue+Vuex实现自动登录的知识点详解
Mar 04 #Javascript
vuex入门最详细整理
Mar 04 #Javascript
JavaScript 严格模式(use strict)用法实例分析
Mar 04 #Javascript
vue 自定义组件的写法与用法详解
Mar 04 #Javascript
js找出5个数中最大的一个数和倒数第二大的数实现方法示例小结
Mar 04 #Javascript
vue请求数据的三种方式
Mar 04 #Javascript
You might like
第六节 访问属性和方法 [6]
2006/10/09 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
2013/04/28 PHP
Symfony2中被遗弃的getRequest()方法分析
2016/03/17 PHP
Laravel中validation验证 返回中文提示 全局设置的方法
2019/09/29 PHP
解决jquery插件冲突的问题
2014/01/23 Javascript
jquery的attr方法禁用表单元素禁用输入内容
2014/06/23 Javascript
iframe里面的元素触发父窗口元素事件的jquery代码
2014/10/19 Javascript
jQuery老黄历完整实现方法
2015/01/16 Javascript
jQuery1.9.1源码分析系列(十六)ajax之ajax框架
2015/12/04 Javascript
jQuery Ajax 实例代码 ($.ajax、$.post、$.get)
2016/04/29 Javascript
javascript jquery对form元素的常见操作详解
2016/06/12 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
2017/03/14 Javascript
JS 组件系列之Bootstrap Table的冻结列功能彻底解决高度问题
2017/06/30 Javascript
使用vue-infinite-scroll实现无限滚动效果
2018/06/22 Javascript
Angular-UI Bootstrap组件实现警报功能
2018/07/16 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
2018/09/29 Javascript
小程序视频或音频自定义可拖拽进度条的示例代码
2018/09/30 Javascript
手把手教你写一个微信小程序(推荐)
2018/10/17 Javascript
webpack 开发和生产并行设置的方法
2018/11/08 Javascript
微信小程序 setData 对 data数据影响问题
2019/04/18 Javascript
Vue开发环境中修改端口号的实现方法
2019/08/15 Javascript
js定时器出现第一次延迟的原因及解决方法
2021/01/04 Javascript
[01:45]典藏宝瓶2+祈求者身心——这就是DOTA2TI9总奖金突破3000万美元的秘密
2019/07/21 DOTA
开源软件包和环境管理系统Anaconda的安装使用
2017/09/04 Python
Python检查和同步本地时间(北京时间)的实现方法
2018/12/03 Python
Python socket模块方法实现详解
2019/11/05 Python
python实现画图工具
2020/08/27 Python
如何强制垃圾回收
2015/10/06 面试题
EJB的激活机制
2013/10/25 面试题
质检员岗位职责
2013/12/17 职场文书
幼儿园中秋节活动方案2013
2014/01/29 职场文书
消防安全管理制度
2014/02/01 职场文书
服务理念口号
2014/06/11 职场文书
幼儿园教师师德师风演讲稿:我自豪我是一名幼师
2014/09/10 职场文书
2015年安全生产管理工作总结
2015/05/25 职场文书
SQL Server删除表中的重复数据
2022/05/25 SQL Server