jQuery学习笔记之回调函数


Posted in Javascript onAugust 15, 2016

1.回调函数定义

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

2.代码

JS代码

(function($){
$.fn.shadow = function(opts){
//定义的默认的参数
var defaults = {
copies: 5,
opacity:0.1,
//回调函数
copyOffset:function(index){
return{x:index,y:index};
}
};
//将opts的内容合并到default中。
var options = $.extend(defaults,opts);
return this.each(function(){
var $originalElement = $(this);
//设置参数对象
for(var i=0;i<options.copies;i++)
{
var offset = options.copyOffset(i);
$originalElement
.clone()
.css({
position:'absolute',
left:$originalElement.offset().left + offset.x,
top:$originalElement.offset().top + offset.y,
margin:0,
zIndex:-1,
//设置参数对象
opacity:options.opacity
})
.appendTo('body');
}
});
};
})(jQuery);
$(document).ready(function(){
$('h1').shadow({
copies:5,
copyOffset:function(index){
return {x:-index,y:-2 * index};
}
});
});

3.分析

通过这段代码调试的时候进入的顺序,便可理解回调函数的机制。通过对黄背景的四段代码加入断点。程序将会以以下的顺序运行

39:先跑第39行,当DOM加载完毕后运行了shadow(),跑完39行并不会直接跑40行。而是直接调到了shadow()函数定义的地方。在这里只是声明了copyOffset的函数指针。

2:这时候查看opts里面的内容Object { copies=5, copyOffset=function()}从这里可以看出来copyOffset只是一个function(),

8:开始走默认参数的copyOffset,与39行一样,不会直接进入回调函数里面的内容。

19:走到这里时,需要将对CopyOffset发出请求并传入了i作为参数。这时候i就是回调函数的参数index。

40:由于13行的”var options = $.Extend(defauflts,opts)”。opts的属性会覆盖掉default的属性,所以不会走9行默认的参数中的回调函数的执行方法,而是走了第40行的回调函数的方法。

4.总结

从上面的分析可以看出,回调函数在参数中声明时,相当于只是声明了一个委托。等到用到这个参数的时候才会真正的执行回调函数里面的内容。

5.附html代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Developing Plugins</title>
<link rel="stylesheet" href="08.css" type="text/css" />
<link rel="stylesheet" href="ui-themes/smoothness/jquery-ui-1.10.0.custom.css" type="text/css" />
<script src="jquery.js"></script>
<script src="jquery-ui-1.10.0.custom.min.js"></script>
<script src="08.js"></script>
</head>
<body>
<div id="container">
<h1>Inventory</h1>
<table id="inventory">
<thead>
<tr class="two">
<th>Product</th>
<th>Quantity</th>
<th>Price</th>
</tr>
</thead>
<tfoot>
<tr class="two" id="sum">
<td>Total</td>
<td></td>
<td></td>
</tr>
<tr id="average">
<td>Average</td>
<td></td>
<td></td>
</tr>
</tfoot>
<tbody>
<tr>
<td><a href="spam.html" data-tooltip-text="Nutritious and delicious!">Spam</a></td>
<td>4</td>
<td>2.50</td>
</tr>
<tr>
<td><a href="egg.html" data-tooltip-text="Farm fresh or scrambled!">Egg</a></td>
<td>12</td>
<td>4.32</td>
</tr>
<tr>
<td><a href="gourmet-spam.html" data-tooltip-text="Chef Hermann's recipe.">Gourmet Spam</a></td>
<td>14</td>
<td>7.89</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>

以上所述是小编给大家介绍的jQuery学习笔记之回调函数,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript编程起步(第五课)
Feb 27 Javascript
js每隔5分钟执行一次ajax请求的实现方法
Nov 27 Javascript
JQuery使用index方法获取Jquery对象数组下标的方法
May 18 Javascript
javascript简单实现滑动菜单效果的方法
Jul 27 Javascript
Boostrap入门准备之border box
May 09 Javascript
JavaScript正则表达式实例详解
Oct 16 Javascript
JS实现的数字格式化功能示例
Feb 10 Javascript
在Bootstrap开发框架中使用dataTable直接录入表格行数据的方法
Oct 25 Javascript
jquery中attr、prop、data区别与用法分析
Sep 25 jQuery
JS插入排序简单理解与实现方法分析
Nov 25 Javascript
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
Oct 29 Javascript
深入了解Vue3模板编译原理
Nov 19 Vue.js
纯css下拉菜单 无需js
Aug 15 #Javascript
浅谈JavaScript 中有关时间对象的方法
Aug 15 #Javascript
js轮盘抽奖实例分析
Apr 17 #Javascript
JavaScript 中有关数组对象的方法(详解)
Aug 15 #Javascript
onmouseover事件和onmouseout事件全面理解
Aug 15 #Javascript
浅谈toLowerCase和toLocaleLowerCase的区别
Aug 15 #Javascript
又一款js时钟!transform实现时钟效果
Aug 15 #Javascript
You might like
解决php中Cannot send session cache limiter 的问题的方法
2007/04/27 PHP
PHP Document 代码注释规范
2009/04/13 PHP
百度地图API使用方法详解
2015/08/25 PHP
php面向对象与面向过程两种方法给图片添加文字水印
2015/08/26 PHP
Yii基于CActiveForm的Ajax数据验证用法示例
2016/07/14 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
javascript一点特殊用法
2008/05/28 Javascript
来自国外的30个基于jquery的Web下拉菜单
2012/06/22 Javascript
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
2012/07/31 Javascript
JavaScript自定义日期格式化函数详细解析
2014/01/14 Javascript
jquery mobile页面跳转后样式丢失js失效的解决方法
2014/09/06 Javascript
js调试工具Console命令详解
2014/10/21 Javascript
js中实现字符串和数组的相互转化详解
2016/01/24 Javascript
JQuery EasyUI学习教程之datagrid 添加、修改、删除操作
2016/07/09 Javascript
canvas仿iwatch时钟效果
2017/03/06 Javascript
原生js实现吸顶效果
2017/03/13 Javascript
JavaScript运动框架 多值运动(四)
2017/05/18 Javascript
JavaScript操作文件_动力节点Java学院整理
2017/06/30 Javascript
js is_valid_filename验证文件名的函数
2017/07/19 Javascript
webpack external模块的具体使用
2018/03/10 Javascript
Vue.js中的extend绑定节点并显示的方法
2019/06/20 Javascript
[54:15]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第二场2月1日
2021/03/11 DOTA
用Python计算三角函数之atan()方法的使用
2015/05/15 Python
python实现图片文件批量重命名
2020/03/23 Python
Python实现base64编码的图片保存到本地功能示例
2018/06/22 Python
django多对多表的创建,级联删除及手动创建第三张表
2019/07/25 Python
django创建最简单HTML页面跳转方法
2019/08/16 Python
CSS3 transforms应用于背景图像的解决方法
2019/04/16 HTML / CSS
区优秀教师事迹材料
2014/02/10 职场文书
捐献物资倡议书范文
2014/05/19 职场文书
监察建议书格式
2014/05/19 职场文书
收入及婚姻状况证明
2014/11/20 职场文书
企业宣传语大全
2015/07/13 职场文书
《游戏公平》教学反思
2016/02/20 职场文书
如何用Node.js编写内存效率高的应用程序
2021/04/30 Javascript
解决Redis启动警告问题
2022/02/24 Redis