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 相关文章推荐
ExtJS GridPanel 根据条件改变字体颜色
Mar 08 Javascript
游览器中javascript的执行过程(图文)
May 20 Javascript
10个基于浏览器的JavaScript调试工具分享
Feb 07 Javascript
JS通过ajax动态读取xml文件内容的方法
Mar 24 Javascript
jQuery树形下拉菜单特效代码分享
Aug 15 Javascript
AngularJS基础 ng-keypress 指令简单示例
Aug 02 Javascript
ES6学习笔记之Set和Map数据结构详解
Apr 07 Javascript
jQuery中hover方法搭配css的hover选择器,实现选中元素突出显示方法
May 08 jQuery
vue.js的手脚架vue-cli项目搭建的步骤
Aug 30 Javascript
JavaScript数据结构之单链表和循环链表
Nov 28 Javascript
解决vue单页使用keep-alive页面返回不刷新的问题
Mar 13 Javascript
Three.js实现简单3D房间布局
Dec 30 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
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
PHP实现WebService的简单示例和实现步骤
2015/03/27 PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
2016/03/07 PHP
PHP实现电商订单自动确认收货redis队列
2017/05/17 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
jQuery 源码分析笔记(3) Deferred机制
2011/06/19 Javascript
jqgrid 编辑添加功能详细解析
2013/11/08 Javascript
js实现div的切换特效上一个下一个
2014/02/11 Javascript
jQuery中:last选择器用法实例
2014/12/30 Javascript
js实现点击文本框显示日期选择器特效代码分享
2020/05/21 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
2016/09/18 Javascript
js 简易版滚动条实例(适用于移动端H5开发)
2017/06/26 Javascript
Openlayers绘制地图标注
2020/09/28 Javascript
[46:38]完美世界DOTA2联赛PWL S2 Magma vs PXG 第三场 11.28
2020/12/02 DOTA
python 3.0 模拟用户登录功能并实现三次错误锁定
2017/11/01 Python
python使用tensorflow保存、加载和使用模型的方法
2018/01/31 Python
Python用61行代码实现图片像素化的示例代码
2018/12/10 Python
Flask-WTF表单的使用方法
2019/07/12 Python
pandas factorize实现将字符串特征转化为数字特征
2019/12/19 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
2020/05/29 Python
如何使用css3实现一个类在线直播的队列动画的示例代码
2020/06/17 HTML / CSS
html5 datalist标签使用示例(自动完成组件)
2014/05/04 HTML / CSS
佳能德国网上商店:Canon德国
2017/03/18 全球购物
新大陆软件面试题
2016/11/24 面试题
八项规定整改方案
2014/02/21 职场文书
父母对孩子说的话
2014/04/12 职场文书
师德自我剖析材料范文
2014/10/06 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
2014年办公室工作总结范文
2014/11/12 职场文书
2014年医药代表工作总结
2014/11/22 职场文书
酒店财务总监岗位职责
2015/04/03 职场文书
2015年健康教育工作总结
2015/04/10 职场文书
Python爬虫实战之爬取携程评论
2021/06/02 Python
利用python调用摄像头的实例分析
2021/06/07 Python
php解析非标准json、非规范json的方式实例
2022/05/10 PHP
输入框跟随文字内容适配宽实现示例
2022/08/14 Javascript