热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【JavaScript】JavaScript回调函数

什么是Javascript回调函数?函数和其他数据一样可以被赋值,删除,拷贝等,所以也可以把函数作为参数传入到另一个函数中。这个函数就是所谓的回调函数举例:不带参数的casefun

什么是Javascript 回调函数?

函数和其他数据一样可以被赋值,删除,拷贝等,所以也可以把函数作为参数传入到另一个函数中。
这个函数就是所谓的回调函数
 
举例:
//不带参数的case
function A(b, c) {
    return b() + c();
}
 
function B() {
    return 10;
}
 
function C() {
    return 7;
}
 
console.log(A(B, C));
 
//带参数的case
//(将参数重组后,传入d, 作为回调函数的参数,这里给我们提供了灵活性,回调函数的参数,完全由我们做主) 
function A(m, n, fun) {
    var d = m+n;
    return fun(d);
}
 
function fun(c) {
    return c
}
 
console.log(A(5, 4, fun));
 
//result (firebug 测试结果)
,
 
 
关于:(http://www.cnblogs.com/fighting_cp/archive/2010/09/20/1831844.html)
Javascript call和apply方法 
call和apply方法用于切换方法的执行上下文,这是一个非常酷的特性。(它两个的区别是参数形式不一样,作用相同)
 
区分apply,call就一句话,
 
foo.call(this, arg1,arg2,arg3) == foo.apply(this, arguments) == this.foo(arg1, arg2, arg3)
 
call, apply都属于Function.prototype的一个方法,它是Javascript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例,也就是每个方法都有call, apply属性.既然作为方法的属性,那它们的使用就当然是针对方法的了.这两个方法是容易混淆的,因为它们的作用一样,只是使用方式不同.
 
call, apply方法区别是,从第二个参数起, call方法参数将依次传递给借用的方法作参数, 而apply直接将这些参数放到一个数组中再传递, 最后借用方法的参数列表是一样的.
 
举例:用B的setMessage方法给A的message属性赋值
function funA(){
    this.message;
    this.getMessage = function() {
        return this.message;
    } 
}
 
function funB(){
    this.message;
    this.setMessage = function(msg) {
        this.message = msg;
    }
}
 
var b = new funB();
var a = new funA();
b.setMessage.call(a, "this is a‘s message!");
 
console.log(a.getMessage());
 
 
//Not Work Case:
//如果message是私有属性就不work
function funA(){
    var message;
    this.getMessage = function() {
        return message;
    } 
}
 
function funB(){
    var message;
    this.setMessage = function(msg) {
        message = msg;
    }
}
 
var b = new funB();
var a = new funA();
b.setMessage.call(a, "this is a‘s message!");
 
console.log(a.getMessage());
 
//result (firebug 测试结果)
,
 
 
举例:为数组增加两个方法,其中用到回调函数
Function.prototype.method = function(name, fn) {
    this.prototype[name] = fn;
    return this;
}
 
if ( !Array.prototype.forEach ) { 
  //这里fn 作为回调函数,我们为它定义了三个参数 数组元素,数组元素的序号,数组本身
  Array.method(‘forEach‘, function(fn, thisObj) {
    var scope = thisObj || window;
    for ( var i = 0, len = this.length; i
      fn.call(scope, this[i], i, this);
    }
  });
}
 
if ( !Array.prototype.filter ) {
  Array.method(‘filter‘, function(fn, thisObj) {
    var scope = thisObj || window;
    var a = [];
    for ( var i = 0, len = this.length; i
      if ( !fn.call(scope, this[i], i, this) ) {
        continue;
      }
      a.push(this[i]);
    }
    return a;
  });
}
 
举例测试:
Function.prototype.method = function(name, fn) {
    this.prototype[name] = fn;
    return this;
}
 
if ( !Array.prototype.forEach ) { 
  Array.method(‘forEach‘, function(fn, thisObj) {
    var scope = thisObj || window;
    for ( var i = 0, len = this.length; i
      fn.call(scope, this[i], i, this);
    }
  });
}
 
//因为Javascript参数是可变的,所以定义callback方法时,参数个数自己选择,但是注意顺序
var a = function(item, i, array) {
    console.log("array[" + i + "] ->" + item + "    array:" + array);
}
 
var array = [1, 28, ‘163‘, 4, ‘Javascript‘];
 
array.forEach(a);
 
//result: (firebug测试结果)
,
 
其他参考资料:
http://recurial.com/programming/understanding-callback-functions-in-Javascript/
http://www.impressivewebs.com/callback-functions-Javascript/

http://zhenghaoju700.blog.163.com/blog/static/135859518201281072518533/

【Javascript】Javascript回调函数,,

【Javascript】Javascript回调函数


推荐阅读
  • 凡客诚品官方网站的前端改进建议
    打开http:www.vancl.com发现采用的Asp.net,这点我感到很欣慰,毕竟国内采用.net技术体系的优秀网站少之又少。好奇之余右键-查看源 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了在Ubuntu下制作deb安装包及离线安装包的方法,通过备份/var/cache/apt/archives文件夹中的安装包,并建立包列表及依赖信息文件,添加本地源,更新源列表,可以在没有网络的情况下更新系统。同时提供了命令示例和资源下载链接。 ... [详细]
  • 前端图片合成技术_靠谱的前端需要做哪些准备?
    Web前端开发源于传统的互联网,互联网普及让人才需求量居高不下,随着移动互联网的高速发展,移动终端的前端开发也越来越受到重视, ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • fiddler_Fiddler的原理和基本介绍
    一,Fiddler的工作原理   1,Fiddler是位于客户端和服务器端的HTTP ... [详细]
author-avatar
川人是天下的盐恋歌_334
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有