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 相关文章推荐
JS实现QQ图片一闪一闪的效果小例子
Jul 31 Javascript
Javascript 遮罩层和加载效果代码
Aug 01 Javascript
使用百度地图api实现根据地址查询经纬度
Dec 11 Javascript
javascript中FOREACH数组方法使用示例
Mar 01 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
Mar 06 Javascript
基于JS实现textarea中获取动态剩余字数的方法
May 25 Javascript
详解基于javascript实现的苹果系统底部菜单
Dec 02 Javascript
详解React之key的使用和实践
Sep 29 Javascript
小程序从手动埋点到自动埋点的实现方法
Jan 24 Javascript
JavaScript中this用法学习笔记
Mar 17 Javascript
利用不到200行代码写一款属于你自己的js类库
Jul 08 Javascript
手写实现JS中的new
Nov 07 Javascript
纯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中的观察者模式
2010/03/24 PHP
深入Memcache的Session数据的多服务器共享详解
2013/06/13 PHP
PHP三元运算的2种写法代码实例
2014/05/12 PHP
PDO预处理语句PDOStatement对象使用总结
2014/11/20 PHP
Yii2 RESTful中api的使用及开发实例详解
2016/07/06 PHP
Zend Framework常用校验器详解
2016/12/09 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
JavaScript 编程引入命名空间的方法与代码
2007/08/13 Javascript
date.parse在IE和FF中的区别
2010/07/29 Javascript
window.parent与window.openner区别介绍
2012/04/12 Javascript
jquery ajax请求实例深入解析
2012/11/26 Javascript
js对象与打印对象分析比较
2013/04/23 Javascript
JS根据生日算年龄的方法
2015/05/05 Javascript
javascript url几种编码方式详解
2016/06/06 Javascript
AngularJS动态绑定HTML的方法分析
2016/11/07 Javascript
详解Vue 非父子组件通信方法(非Vuex)
2017/05/24 Javascript
Javascript实现base64的加密解密方法示例
2017/06/27 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
2017/09/04 Javascript
nodejs各种姿势断点调试的方法
2020/06/18 NodeJs
Vue 修改网站图标的方法
2020/12/31 Vue.js
Python常见数据结构详解
2014/07/24 Python
python字典get()方法用法分析
2015/04/17 Python
Python 给某个文件名添加时间戳的方法
2018/10/16 Python
python实现顺时针打印矩阵
2019/03/02 Python
常用python爬虫库介绍与简要说明
2020/01/25 Python
如何用Python编写一个电子考勤系统
2021/02/08 Python
意大利领先的线上奢侈品销售电商:Eleonora Bonucci
2017/10/17 全球购物
资产评估专业大学生求职信
2013/09/29 职场文书
优秀应届本科生求职信
2014/07/19 职场文书
学校教师安全责任书
2014/07/23 职场文书
亚布力滑雪场导游词
2015/02/09 职场文书
生产车间管理制度
2015/08/04 职场文书
MongoDB使用profile分析慢查询的步骤
2021/04/30 MongoDB
详解MySQL中的主键与事务
2021/05/27 MySQL
postgresql 删除重复数据案例详解
2021/08/02 PostgreSQL