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