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之十 事件模块概述
Jun 27 Javascript
ExtJS4 Grid改变单元格背景颜色及Column render学习
Feb 06 Javascript
jquery获取tagName再进行判断
May 29 Javascript
node.js中的fs.writeSync方法使用说明
Dec 15 Javascript
JS实现仿苹果底部任务栏菜单效果代码
Aug 28 Javascript
AngularJS 避繁就简的路由
Jul 01 Javascript
浅谈JS之tagNaem和nodeName
Sep 13 Javascript
详解Vue2 无限级分类(添加,删除,修改)
Mar 07 Javascript
深入浅出es6模板字符串
Aug 26 Javascript
详解vuex持久化插件解决浏览器刷新数据消失问题
Apr 15 Javascript
微信小程序动态添加view组件的实例代码
May 23 Javascript
js实现时钟定时器
Mar 26 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
我的论坛源代码(二)
2006/10/09 PHP
php 中的str_replace 函数总结
2007/04/27 PHP
Thinkphp中Create方法深入探究
2014/06/16 PHP
ThinkPHP控制器详解
2015/07/27 PHP
PHP接口并发测试的方法(推荐)
2016/12/15 PHP
Yii2语言国际化自动配置详解
2018/08/22 PHP
php如何计算两坐标点之间的距离
2018/12/29 PHP
浅谈PHP中的Trait使用方法
2019/03/22 PHP
Laravel第三方包报class not found的解决方法
2019/10/13 PHP
jQuery formValidator表单验证插件开源了 含API帮助、源码、示例
2008/08/14 Javascript
IE中createElement需要注意的一个问题
2010/07/13 Javascript
dojo随手记 gird组件引用
2011/02/24 Javascript
jquery 实现二级/三级/多级联动菜单的思路及代码
2013/04/08 Javascript
js 通过html()及text()方法获取并设置p标签的显示值
2014/05/14 Javascript
jQuery中parents()方法用法实例
2015/01/07 Javascript
jQuery将所有被选中的checkbox某个属性值连接成字符串的方法
2015/01/24 Javascript
详解JavaScript 中的 replace 方法
2016/01/01 Javascript
JavaScript实现url参数转成json形式
2016/09/25 Javascript
Vue 中如何正确引入第三方模块的方法步骤
2019/05/05 Javascript
Vue v-bind动态绑定class实例方法
2020/01/15 Javascript
vue实现页面切换滑动效果
2020/06/29 Javascript
vue动态合并单元格并添加小计合计功能示例
2020/11/26 Vue.js
[01:01:52]完美世界DOTA2联赛PWL S2 GXR vs Magma 第二场 11.25
2020/11/26 DOTA
使用Python的Flask框架实现视频的流媒体传输
2015/03/31 Python
在Django的视图中使用form对象的方法
2015/07/18 Python
Python中函数及默认参数的定义与调用操作实例分析
2017/07/25 Python
详解python列表生成式和列表生成式器区别
2019/03/27 Python
Python单元和文档测试实例详解
2019/04/11 Python
Python使用Turtle库绘制一棵西兰花
2019/11/23 Python
TENSORFLOW变量作用域(VARIABLE SCOPE)
2020/01/10 Python
pytorch模型存储的2种实现方法
2020/02/14 Python
pandas和spark dataframe互相转换实例详解
2020/02/18 Python
英国在线购买马术服装:EQUUS
2019/07/12 全球购物
Nginx设置日志打印post请求参数的方法
2021/03/31 Servers
浅析Python实现DFA算法
2021/06/26 Python
vue实现可以快进后退的跑马灯组件
2022/04/08 Vue.js