例子的详细讲解

  1. Filter Resolve

上面的的代码是怎么运行的呢

点击button的先执行 $.Deferred(),得到具有很多方法的defer

defer.resolve( 5 );

  1. var doneList = jQuery.Callbacks( "once memory" ),
  2. failList = jQuery.Callbacks( "once memory" ),
  3. progressList = jQuery.Callbacks( "memory" ),
  4. state = "pending";
  5. lists = {
  6. resolve: doneList,
  7. reject: failList,
  8. notify: progressList
  9. }
  10. for ( key in lists ) {
  11. deferred[ key ] = lists[ key ].fire;
  12. deferred[ key + "With" ] = lists[ key ].fireWith;
  13. }
  14. //根据上面的代码可得
  15. //deferred[ 'resolve']=lists[ 'resolve'].fire;
  16. //deferred[ 'resolveWidth']=lists[ 'resolve'].fireWith;
  17. //deferred[ 'reject']=lists[ 'reject'].fire;
  18. //deferred[ 'rejectWidth']=lists[ 'reject'].fireWith;
  19. //deferred[ 'notify']=lists[ 'notify'].fire;
  20. //deferred[ 'notifyWidth']=lists[ 'notify'].fireWith;
  21. //因此resolve( 5 )执行了
  1. fire: function() {
  2. self.fireWith( this, arguments );
  3. return this;
  4. },
  5. fireWith: function( context, args ) {
  6. //stack=[];为true;firing 为false;flag={}
  7. if ( stack ) {
  8. if ( firing ) {
  9. if ( !flags.once ) {
  10. stack.push( [ context, args ] );
  11. }
  12. //memory =undefined
  13. } else if ( !( flags.once && memory ) ) {
  14. fire( context, args );
  15. }
  16. }
  17. return this;
  18. }
  1. fire = function( context, args ) {
  2. args = args || [];
  3. //memory = [ context, args ];即为self,和5
  4. memory = !flags.memory || [ context, args ];
  5. fired = true;
  6. firing = true;
  7. firingIndex = firingStart || 0;
  8. firingStart = 0;
  9. firingLength = list.length;
  10. for ( ; list && firingIndex < firingLength; firingIndex++ ) {
  11. //函数执行后为false并且flags.stopOnFalse 为true时memory = true;
  12. //注意这里执行了函数
  13. if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) {
  14. memory = true; // Mark as halted
  15. break;
  16. }
  17. }
  18. firing = false;
  19. if ( list ) {
  20. if ( !flags.once ) {
  21. if ( stack && stack.length ) {
  22. memory = stack.shift();
  23. self.fireWith( memory[ 0 ], memory[ 1 ] );
  24. }
  25. } else if ( memory === true ) {
  26. self.disable();
  27. } else {
  28. //最终又把list函数组给赋值为空
  29. list = [];
  30. }
  31. }
  32. }

jquery1.7.2的源码分析(三)$.Deferred的更多相关文章

  1. jquery1.7.2的源码分析(一)

    说到jquery可能是大家最经常用到的,在日常的编写程序中最经常使用到,在使用jquery插件的同时,深入的解读jquery源码有利于我们学到设计的思想和实现的技巧 在jquery源码的分析中,其中艾 ...

  2. cocos2dx骨骼动画Armature源码分析(三)

    代码目录结构 cocos2dx里骨骼动画代码在cocos -> editor-support -> cocostudio文件夹中,win下通过筛选器,文件结构如下.(mac下没有分,是整个 ...

  3. spark[源码]-任务调度源码分析[三]

    前言 在上一篇文章中,我主要是讲解了DAG阶段的处理,spark是如何将一个job根据宽窄依赖划分出多个stage的,在最后一步中是将生成的TaskSet提交给了TaskSchedulerInmpl的 ...

  4. HashMap源码分析三

      HashMap的源码,在jdk1.5中相比jdk1.4,改动不大,有几个方面   1 jdk1.5中引入了范型,在HashMap中也有体现 2 引入了另一个hash值的计算方式,不过默认是关闭状态 ...

  5. Qt update刷新之源码分析(三)

    大家好,我是IT文艺男,来自一线大厂的一线程序员 上次视频给大家从源码层面剖析了Qt刷新事件(QEvent::UpdateRequest)的处理流程,这次视频主要从源码层面剖析对刷新事件的进一步处理, ...

  6. YII 的源码分析(三)

    前面已经看完了启动一个yii程序所要经过的流程,以及渲染一个页面是怎么完成的.今天要分析的是yii是如何处理用户请求的.也就是控制和动作部分. 还是以helloworld为例演示这一过程.我们在地址栏 ...

  7. Nop源码分析三

    程序的初始化工作和Ioc工作已经做完,nop默认引擎已经初始化. 下面在回到global文件的启动方法Application_Start()中, 1,继续分析下面的代码: var dependency ...

  8. java动态代理——字段和方法字节码的基础结构及Proxy源码分析三

    前文地址:https://www.cnblogs.com/tera/p/13280547.html 本系列文章主要是博主在学习spring aop的过程中了解到其使用了java动态代理,本着究根问底的 ...

  9. jquery1.7.2的源码分析(四)$.Deferred(2)

    jQuery.Callbacks = function( flags ) { // Convert flags from String-formatted to Object-formatted // ...

随机推荐

  1. Android版本和API Level对应关系

    http://developer.android.com/guide/topics/manifest/uses-sdk-element.html Platform Version       API ...

  2. 15-static和extern关键字1-对函数的作用

    一.extern与函数 如果一个程序中有多个源文件(.c),编译成功会生成对应的多个目标文件(.obj),这些目标文件还不能单独运行,因为这些目标文件之间可能会有关联,比如a.obj可能会调用c.ob ...

  3. Java之this关键字的用法

    Java 中的 this 关键字指当前的对象,可以直接用其调用当前对象的成员变量,也可以直接用其调用当前对象的成员方法,这是我们常见的场景,那么有没有其它的情况呢! this 还可以在无参的构造方法中 ...

  4. 使用gulp解决外部编辑器修改Eclipse文件延迟更新的问题

    本人前端用惯了Hbuilder,修改了eclipse项目中的文件后,由于是外部编辑器修改过的,eclipse不会自动部署更新,一般按F5刷新项目,或者在 preferences > genera ...

  5. ERR_CONTENT_DECODING_FAILED错误的原因和解决办法

    1. ERR_CONTENT_DECODING_FAILED错误的原因 这种错误通常发生于Http请求中的头部信息标识内容是gzip编码的,但实际上不是. 2. ERR_CONTENT_DECODIN ...

  6. Java导出excel

    一.介绍 常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际的开发中,很多时候需要实现导入.导出Excel的应用. ...

  7. Sublime Text 3 快捷键总结

    以下是个人总结不完全的快捷键总汇,祝愿各位顺利解放自己的鼠标. 选择类 Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本. Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同 ...

  8. Oracle基础——学习笔记

    一[用户]sys\system\sysman\scott 1.查看数据库所有用户(dba_users数据字典): select username from dba_users; 2.查看当前用户: s ...

  9. SQL Server数据库性能优化技巧

    查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引: 2.I/O吞吐量小,形成了瓶颈效应: 3.内存不足: 4.网络速度慢: 5.查询出的数据量过大: 6.锁或者死锁: 7.返回了不必 ...

  10. 关于 AVI 的一些代码

    #ifndef __HSS_AUTO_REVISE_AVI_FRAMERATE_HSS__ #define __HSS_AUTO_REVISE_AVI_FRAMERATE_HSS__ /******* ...