javascript之回调函数的理解
来源:互联网 发布:全智允新公司js 编辑:程序博客网 时间:2024/05/29 17:29
什么是回调或高级函数?
回调函数被认为是一种高级函数,一种被作为参数传递给另一个函数(在这称作"otherFunction")的高级函数,回调函数会在otherFunction内被调用(或执行)。回调函数的本质是一种模式(一种解决常见问题的模式),因此回调函数也被称为回调模式。
细细体味一下另一个基本JavaScript的典型例子:
var friends = ["Mike", "Stacy", "Andy", "Rick"];friends.forEach(function (eachName, index){console.log(index + 1 + ". " + eachName); // 1. Mike, 2. Stacy, 3. Andy, 4. Rick});
我们再一次用同样的方式传递了一个匿名的函数(没有函数名的函数)给forEach方法,作为forEach的参数。
forEach()函数从头到尾把数组遍历一遍。有三个参数分别是:数组元素,元素的索引,数组本身(如果是一个参数就是数组元素,也就是数组的值。
var
data=[1,2,3,4,5,6];
var
sum=0;
data.forEach(
function
(v){
//其中的v就是数组的值 123456
sum+=v;})
document.write(sum+
"<br>"
);
//打印出来是21
data.forEach(
function
(o,p,q){
//分别对应:数组元素,元素的索引,数组本身
q[p]=o+1;
})
document.write(data);
注意:forEach无法在所有元素都传递给调用的函数之前终止(而for循环却有break方法)
到目前为止,我们传递了一个匿名的函数作为参数给另一个函数或方法。在看其它更复杂的回调函数之前,让我们理解一下回调的工作原理并实现一个自己的回调函数。
回调函数是如何实现的?
我们可以像使用变量一样使用函数,作为另一个函数的参数,在另一个函数中作为返回结果,在另一个函数中调用它。当我们作为参数传递一个回调函数给另一个函数时,我们只传递了这个函数的定义,并没有在参数中执行它。
当包含(调用)函数拥有了在参数中定义的回调函数后,它可以在任何时候调用(也就是回调)它。
这说明回调函数并不是立即执行,而是在包含函数的函数体内指定的位置“回调”它(形如其名)。所以,即使第一个jQuery的例子看起来是这样:
//The anonymous function is not being executed there in the parameter. //The item is a callback function$("#btn_1").click(function() { alert("Btn 1 Clicked");});
匿名函数将延迟在click函数的函数体内被调用,即使没有名称,也可以被包含函数通过 arguments对象访问。
回调函数是闭包的
当作为参数传递一个回调函数给另一个函数时,回调函数将在包含函数函数体内的某个位置被执行,就像回调函数在包含函数的函数体内定义一样。这意味着回调函数是闭包的。从所周知,闭包函数可以访问包含函数的作用域,所以,回调函数可以访问包含函数的变量,甚至是全局变量。
- javascript之回调函数的理解
- 理解javascript的回调函数
- 彻底理解javascript的回调函数
- 深入理解JavaScript的回调函数
- 理解javascript 回调函数
- 理解javascript回调函数
- 对基于javascript的回调函数的理解
- 彻底理解javascript的回调函数(推荐)
- javascript回调函数(Callback)的理解
- 彻底理解javascript的回调函数(推荐)
- JavaScript 回调函数怎么理解
- 简单理解javascript回调函数
- JavaScript回调函数应用理解浅析
- JavaScript回调函数应用理解浅析
- javascript 一句话理解回调函数
- 理解javascript中的回调函数(callback)
- javascript中的回调函数【理解记忆】
- javascript 理解和使用回调函数
- 未找到元数据文件 dll
- AsyncTask输入参数
- 图像滤波之二维高斯核
- HDOJ(HDU) 2201 熊猫阿波的故事(概率问题)
- 《Windows核心编程》---Interlocked原子访问系列函数
- javascript之回调函数的理解
- 正则表达式学习笔记 之 group()和group(i)的区别
- JS和AS交互
- 设置python 模块调用路径
- web数据挖掘学习1
- scala讲解---变量,函数
- hdoj-2717-Catch That Cow
- K-th Number【POJ2104】——主席树
- Activiti 由bpmn文件到BpmnModel实体类转换