首页
学习
活动
专区
圈层
工具
发布

JS魔法堂:jQuery.Deferred(jQuery1.5-2.1)源码剖析

(而不是Promises/A+规范中的成功/失败事件处理函数和Deferred单向链表)。...,而不是上一个回调函数的返回值作为下一个回调函数的入参来处理,无法形成责任链模式(Promises/A+规范支持)。  ...并且resolveWith的遍历调用回调函数队列中没有采用责任链模式,与Promises/A+规范截然不同。另外回调函数均为同步调用,而不是Promises/A+中的异步调用。.../** * fnDone和fnFail作为当前EnhancedDeferred实例的回调函数, * 而不是pipe函数中新创建的EnhancedDeferred实例的回调函数。...七、总结                                  通过上述内容大家已经清楚jQuery.Deferred并不是Promise/A+规范的完整实现(甚至可以说是相距甚远),且jQuery1.8

2.1K90

js的回调函数详解

因为函数是第一类对象,我们可以在Javascript使用回调函数。在下面的文章中,我们将学到关于回调函数的方方面面。...下面是一个在jQuery中使用回调函数简单普遍的例子: /注意到click方法中是一个函数而不是一个变量//它就是回调函数$("#btn_1").click(function() { alert("...给你的函数命名并传递它们的名字作为回调函数,而不是主函数的参数中定义匿名函数。 模块化L将你的代码分隔到模块中,这样你就可以到处一块代码来完成特定的工作。然后你可以在你的巨型应用中导入模块。...创建你自己的回调函数 既然你已经完全理解了关于Javascript中回调函数的一切(我认为你已经理解了,如果没有那么快速的重读以便),你看到了使用回调函数是如此的简单而强大,你应该查看你的代码看看有没有能使用回调函数的地方...相反,我用回调函数实现了添加功能,这样一来获取用户信息的主函数便可以通过简单的将用户全名和性别作为参数传递给回调函数并执行来完成任何任务。

7.3K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    不使用回调函数的ajax请求实现(async和await简化回调函数嵌套)

    而在JavaScript中,因为语言本身不支持多线程, 所以此类问题是使用回调函数来解决。...以最简单的前端ajax请求为例 代码先输出1,再输出2,整个程序执行流程并未因http请求而被阻塞,回调函数方案完美的把问题解决。 然而,这只是最简单回调函数示例,假如回调函数嵌套了许多层呢?...先把上面用JavaScript实现的多层嵌套回调用同步的方式来改写, 代码如下 代码由ajax和run这两个函数组成, ajax是对jquery ajax的封装,使之能不使用回调函数就能获得ajax的响应结果...按照传统的编码方式, 可以将reject看作是抛出了一个异常,像throw "请求失败", 这样,在函数调用的外部可以用try catch进行捕获。将值传出去为什么要通过这两个参数呢?...至于深入细节方面的知识, 有兴趣的同学可以去阮一峰的博客里学习, 附上链接地址 http://www.ruanyifeng.com/blog/2015/05/async.html

    3.7K50

    JavaScript中的三种模块化规范AMD CMD CommonJS

    为什么要使用模块化 网站越来越复杂,js代码、js文件也越来越多 1.命名冲突 2.文件依赖问题 程序中的模块化 开发效率高 一次编写多次使用 方便维护了(维护的成本更低)模块之间有高耦合低内聚的特点...//定义模块 exports.doStuff = function() {}; module.exports = someValue; //引入模块 -- 同步执行,不用回调 require(...服务器端模块化规范 -- CommonJS 老实说,在浏览器环境下,没有模块也不是特别大的问题,毕竟网页程序的复杂性有限;但是在服务器端,一定要有模块,与操作系统和其他应用程序互动,否则根本没法编程。...在CommonJS中,有一个全局性方法require(),用于加载模块 浏览器端 -- AMD(requirejs) CMD(Seajs) 因为服务器与APP都是加载的本地的资源,所以,不用回调这种操作...定义模块 define 定义模块 define(function(){}) 函数体内的方法属性都属于这个方法,对外有封装性;解决了命名冲突问题,使js代码有了封装性 直接调用 jQuery 插件等非标准模块的方法

    63600

    Callbacks vs Events

    比如,jQuery,YUI以及Dojo他们都支持自定义事件“document ready”。然而 这些自定义事件的实现往往使用的是一种回调模式。   回调系统(模式)往往需要一个数组来存储回调函数。...问题所在   现在我们尝试下用“回调模式”实现自定义事件的系统。在这里,使用jQuery库。...如果任何一个回调函数抛出错误,那么随后的回调函数将不会被执行。实际上,这也意味着一个 写的很烂的插件有可能会阻止其他插件的初始化或正常工作。   Dojo也和jQuery一样有着相同的问题。...大多数的js库用回调模式实现自定义事件。就像我之前论证的,回调模式很脆弱。用定时器来进行事件分派在某种程度上是可以,但是它并不是真正的事件系统。在 实际的事件系统中,事件被依次分派。...而现在 很多库也借鉴了这种方法,确实也证实了DE的伟大之处。   以后还是应该多跟着巨人后面走走,拾人牙慧也不是不可以。

    75040

    IDEA永久激活码 激活教程 亲测有效(2022年最新IDEA激活码)

    jQuery是一个快速,小型且功能丰富的JavaScript库。借助易于使用的API(可在多种浏览器中使用),它使HTML文档的遍历和操纵,事件处理,动画和Ajax等事情变得更加简单。...工作原理jQuery的模块可以分为3部分:入口模块、底层支持模块和功能模块。...在底层支持模块中,回调函数列表模块用于增强对回调函数的管理,支持添加、移除、触发、锁定、禁用回调函数等功能;异步队列模块用于解耦异步任务和回调函数,它在回调函数列表的基础上为回调函数增加了状态,并提供了多个回调函数列表...在功能模块中,事件系统提供了统一的事件绑定、响应、手动触发和移除机制,它并没有将事件直接绑定到DOM元素上,而是基于数据缓存模块来管理事件;Ajax模块允许从服务器上加载数据,而不用刷新页面,它基于异步队列模块来管理和触发回调函数...jQuery Core 也在积极的维护和发展,可以看到,jQuery 每月仍保持着400W 的下载量。

    2.7K10

    JavaScript回调函数

    JavaScript的回调函数大概是JavaScript中使用最广泛的函数编程技术了,我们几乎可以在任何脚本中看到它的身影。...回调函数有几个需要注意的点: 1、 不会立即执行 2、 闭包 3、 This指向 先来看一下jQuery最经典的回调: $('#test').click(function () { console.log...,甚至有些觉得不把函数当做参数传入,直接调用这个函数也可以做到。...回调函数可以避免重复代码、加强代码可维护性、可读性,一般用在异步编程、事件监听处理、定时器计时器等。 然后我们来说一下为什么感觉回调函数没什么用,那是因为回调函数分为异步回调和同步回调。...异步回调就更有用了,最典型的就是ajax的异步回调,包括封装ajax。 关于回调我也不知道解释的能不能让人明白,也不知道是不是正确,都是个人理解,有问题欢迎指教。 (完)

    2.3K20

    Promise机制

    Javascript 采用回调函数(callback)来处理异步编程。...这种 thenable 的特性使得 Promise 的实现更具有通用性:只要其暴露出一个遵循 Promise/A+ 协议的 then 方法即可;这同时也使遵循 Promise/A+ 规范的实现可以与那些不太规范但可用的实现能良好共存...1.8 之前的版本, jQuery 的 then 方法只是一种可以同时调用 done 、 fail 和 progress 这三种回调的速写方法,而 Promises/A 规范的 then 在行为上更像是...jQuery 1.8 修正了这个问题,使 then 成为 pipe 的同义词。不过,由于向后兼容的问题, jQuery 的 Promise 再如何对 Promises/A 示好也不太会招人待见。...在 JQuery 的 Promise 对象的回调中抛出错误是个糟糕的主意,因为错误不会被捕获。

    1.8K100

    Promises机制

    Javascript 采用回调函数(callback)来处理异步编程。...这种 thenable 的特性使得 Promise 的实现更具有通用性:只要其暴露出一个遵循 Promise/A+ 协议的 then 方法即可;这同时也使遵循 Promise/A+ 规范的实现可以与那些不太规范但可用的实现能良好共存...1.8 之前的版本, jQuery 的 then 方法只是一种可以同时调用 done 、 fail 和 progress 这三种回调的速写方法,而 Promises/A 规范的 then 在行为上更像是...jQuery 1.8 修正了这个问题,使 then 成为 pipe 的同义词。不过,由于向后兼容的问题, jQuery 的 Promise 再如何对 Promises/A 示好也不太会招人待见。...在 JQuery 的 Promise 对象的回调中抛出错误是个糟糕的主意,因为错误不会被捕获。

    1.1K40

    Promise机制详解

    Javascript 采用回调函数(callback)来处理异步编程。...这种 thenable 的特性使得 Promise 的实现更具有通用性:只要其暴露出一个遵循 Promise/A+ 协议的 then 方法即可;这同时也使遵循 Promise/A+ 规范的实现可以与那些不太规范但可用的实现能良好共存...1.8 之前的版本, jQuery 的 then 方法只是一种可以同时调用 done 、 fail 和 progress 这三种回调的速写方法,而 Promises/A 规范的 then 在行为上更像是...jQuery 1.8 修正了这个问题,使 then 成为 pipe 的同义词。不过,由于向后兼容的问题, jQuery 的 Promise 再如何对 Promises/A 示好也不太会招人待见。...在 JQuery 的 Promise 对象的回调中抛出错误是个糟糕的主意,因为错误不会被捕获。 最后一个例子揭示了,实现 Promise 的关键是实现好 doResolve 方法,在完事以后触发回调。

    1.9K70

    jQuery (二)

    绑定鼠标在进入的时候 mouseleave 绑定鼠标在离开的时候 $('p').bind('mouseenter mouseleave', f); 还可以使用英文句号,作为命名空间,这样方便对多个回调函数的管理...//api.jquery.com/fadeIn/ 使用淡入效果 [1.gif] 不是执行完毕。 如果想要执行多段动画,无需使用回调,因为动画为队列机制,直接采用链式即可。...// 方便下一个继续调用 }).animate({ borderWidth: "+=100px;" }); clearQueue()方法将会清楚队列,给queue()方法,传入一个函数组成的数组,而不是单一函数时...Ajax Ajax实现了不需要刷新,即可动态的加载一部分页面, load 是滴,load如果传入的参数为字符串,而是函数,load为事件的处理程序的注册,而不是ajax方法。

    10.8K30

    jquery animate 动画

    通过animate方法可以设置元素某属性值上的动画,可以设置一个或多个属性值,动画执行完成后会执行一个函数。...; }); 下面来写一个div放大的动画效果。 ? 上面首先写好一个div,下面来使用jquery来实现放大的效果。 ? 点击动画的按钮,div的宽高就会放大。...可以使用回调函数分别变化width、height,如下: ? 使用animate最后的回调函数,再执行一个animate,就可以分开运行动画效果的了。 效果如下: ? ?...参数可以写成数字表达式: 另外除了上面动画,还可以实现一个这样的效果。 每点击按钮一次,触发动画效果,就将div的宽度增加100px。 ? 实现效果如下: 点击第一次触发,如下: ?...DOCTYPE html> jquery-3.4.0.

    3.1K40
    领券