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 相关文章推荐
JsDom 编程小结
Aug 09 Javascript
js 浏览本地文件夹系统示例代码
Oct 24 Javascript
js实现类似于add(1)(2)(3)调用方式的方法
Mar 04 Javascript
适用于javascript开发者的Processing.js入门教程
Feb 24 Javascript
vuex实现简易计数器
Oct 27 Javascript
JS实现改变HTML上文字颜色和内容的方法
Dec 30 Javascript
详解从Node.js的child_process模块来学习父子进程之间的通信
Mar 27 Javascript
vue-cli+webpack记事本项目创建
Apr 01 Javascript
浅谈Vue网络请求之interceptors实际应用
Feb 28 Javascript
vue router的基本使用和配置教程
Nov 05 Javascript
vue-cli中使用高德地图的方法示例
Mar 28 Javascript
Jquery让form表单异步提交代码实现
Nov 14 jQuery
纯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获取远程图片并把它保存到本地的代码
2008/04/07 PHP
js和php邮箱地址验证的实现方法
2014/01/09 PHP
PHP登录验证码的实现与使用方法
2016/07/07 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
JavaScript让IE浏览器event对象符合W3C DOM标准
2009/11/24 Javascript
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
50款非常棒的 jQuery 插件分享
2012/03/29 Javascript
如何让easyui gridview 宽度自适应窗口改变及fitColumns应用
2013/01/25 Javascript
js动态创建、删除表格示例代码
2013/08/07 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
2016/01/23 Javascript
jQuery实现一个简单的验证码功能
2017/06/26 jQuery
微信小程序实现的日期午别医生排班表功能示例
2019/01/09 Javascript
微信小程序一周时间表功能实现
2019/10/17 Javascript
js实现AI五子棋人机大战
2020/05/28 Javascript
[01:18]DOTA2超级联赛专访hanci ForLove淘汰感言曝光
2013/06/04 DOTA
[01:03:27]NAVI vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
使用 Python 获取 Linux 系统信息的代码
2014/07/13 Python
python实现通过代理服务器访问远程url的方法
2015/04/29 Python
浅析python中的分片与截断序列
2016/08/09 Python
总结Python图形用户界面和游戏开发知识点
2019/05/22 Python
python做反被爬保护的方法
2019/07/01 Python
PyTorch学习:动态图和静态图的例子
2020/01/06 Python
pytorch 限制GPU使用效率详解(计算效率)
2020/06/27 Python
mac安装python3后使用pip和pip3的区别说明
2020/09/01 Python
Python析构函数__del__定义原理解析
2020/11/20 Python
Lookfantastic台湾:英国彩妆美发保养购物网
2018/03/26 全球购物
什么是接口(Interface)?
2013/02/01 面试题
光声世纪笔试题目
2012/08/25 面试题
美术国培研修感言
2014/02/12 职场文书
心理学专业求职信
2014/06/16 职场文书
环境科学专业求职信
2014/08/04 职场文书
2014年学校国庆主题活动方案
2014/09/16 职场文书
2015年客服工作总结范文
2015/04/02 职场文书
大学军训心得体会800字
2016/01/11 职场文书
总结三种用 Python 作为小程序后端的方式
2022/05/02 Python
Python 读取千万级数据自动写入 MySQL 数据库
2022/06/28 Python