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的event详解。
Sep 06 Javascript
JS解决url传值出现中文乱码的另类办法
Apr 08 Javascript
jquery实现非叠加式的搜索框提示效果
Jan 07 Javascript
JavaScript中用getDate()方法返回指定日期的教程
Jun 09 Javascript
jQuery实现仿腾讯视频列表分页效果的方法
Aug 07 Javascript
jQuery实现打开页面渐现效果示例
Jul 27 Javascript
js实现图片切换(动画版)
Dec 25 Javascript
使用jquery模拟a标签的click事件无法实现跳转的解决
Dec 04 jQuery
VuePress 静态网站生成方法步骤
Feb 14 Javascript
EasyUI 数据表格datagrid列自适应内容宽度的实现
Jul 18 Javascript
react实现antd线上主题动态切换功能
Aug 12 Javascript
浅谈JavaScript作用域
Dec 06 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 进程锁定问题分析研究
2009/11/24 PHP
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
2014/04/25 PHP
javascript中的对象和数组的应用技巧
2007/01/07 Javascript
jquery实现图片裁剪思路及实现
2013/08/16 Javascript
JavaScript从数组的indexOf()深入之Object的Property机制
2016/05/11 Javascript
jQuery Ajax 全局调用封装实例代码详解
2016/06/02 Javascript
JS实现页面数据无限加载
2016/09/13 Javascript
纯JS打造网页中checkbox和radio的美化效果
2016/10/13 Javascript
原生js编写2048小游戏
2017/03/17 Javascript
jQuery事件_动力节点Java学院整理
2017/07/05 jQuery
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
2017/10/26 Javascript
微信小程序使用swiper组件实现层叠轮播图
2018/11/04 Javascript
webpack3里使用uglifyjs压缩js时打包报错的解决
2018/12/13 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
2019/04/26 Javascript
Vue 根据条件判断van-tab的显示方式
2020/08/03 Javascript
如何利用JavaScript编写更好的条件语句详解
2020/08/10 Javascript
[27:53]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS iG
2014/05/26 DOTA
[34:44]Liquid vs TNC Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
python中使用smtplib和email模块发送邮件实例
2014/04/22 Python
简单谈谈Python中的几种常见的数据类型
2017/02/10 Python
详解Django中六个常用的自定义装饰器
2018/07/04 Python
解决win64 Python下安装PIL出错问题(图解)
2018/09/03 Python
pymysql的简单封装代码实例
2020/01/08 Python
python3 sleep 延时秒 毫秒实例
2020/05/04 Python
Python测试框架:pytest学习笔记
2020/10/20 Python
以下为Windows NT 下的32 位C++程序,请计算sizeof 的值
2016/12/07 面试题
大学理论知识学习自我鉴定
2014/04/28 职场文书
学校学雷锋活动总结
2014/06/26 职场文书
家庭贫困证明
2014/09/23 职场文书
四风个人对照检查材料思想汇报
2014/09/25 职场文书
自查自纠整改报告
2014/11/06 职场文书
2014小学语文教师个人工作总结
2014/12/03 职场文书
试用期自我评价范文
2015/03/10 职场文书
会计简历自我评价
2015/03/10 职场文书
golang特有程序结构入门教程
2021/06/02 Python
java项目构建Gradle的使用教程
2022/03/24 Java/Android