首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

零基础打造自己的 js 类库(1)

; 这样差不多就是最终的版本了,我记得初学js的时候,看这种代码很吃力,好像在看外星语言一样,后来看多了也就习惯了。 自执行函数就是这么一回事,没什么大不了的。...你写 aaa , bbb , ccc 都没问题,只要你愿意的话。 我以前经常看别人写的代码,参数里面有callback,现在我知道是回调函数的意思。...可是我以前不知道,然后就觉得很困惑,作为一个英语比日语还差的js玩家,我感到很那个啥。 其实无所谓,只是一个名字而已,你写什么都行,只要符合标识符的命名规范就成。...总有人觉得,看到参数里边写了context(上下文),callback(回调函数)这样的词汇,就觉得很困惑。 不要困惑啦,不要再惊恐啦,它就是一个名称罢了! 。。。 额,扯远了,继续回来。...参加工作后对计算机感兴趣,深知初学编程之艰辛。 希望将自己所学记录下来,给初学者一点帮助。 免责声明: 博客中所有的图片素材均来自百度搜索,仅供学习交流,如有问题请联系我,侵立删,谢谢。

3.6K70

为什么我避免使用asyncawait?

例如,一个模式可能是干净的、简洁的或广泛使用的,但如果它导致了容易出错的代码,它就是一个我可能会拒绝的模式。这些模式是双刃剑,很容易搬起石头砸自己的脚。首先,它是建立在一个谎言之上的。...唯一可以优化的地方是保存函数。没有任何其他选择。我看了第二个例子,也有同样的想法。唯一可以优化的地方是保存函数。也许只是因为我对Promise的太熟悉了,但我看了第三个例子,我很快看到了一个机会。...毕竟,promises设计之初的目的之一就是消除 "回调地狱 "的问题,所以我很困惑,人们说promises会导致回调地狱(我的意思是,它毕竟被称为回调(callbacks)地狱,而不是promises...但后来我真的看到了一些promise的代码,它们看起来惊人地像回调地狱。我很困惑,为什么有人会这样使用promise。最终,我得出结论,有些人对promise的工作原理有一个非常基本的误解。...在我讨论这个问题之前,首先让我承认,事实上不可能用async/await创造出金字塔结构的回调地狱,所以它有这个优势。但是我从来没有写过一个超过两级的promise流,没有必要。

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

    破阵九解:Node和浏览器之事件循环任务队列异步顺序数据结构

    6个:包括4个主队列(main queue)和两个中间队列(intermediate queue) 四个主队列由libuv提供 两个中间队列由Node.js实现 (⚠️上面这个论断我是根据相关资料推断的...这个图可能说的不是很清楚,所以我整理了一下,如下所示: ? (备注⚠️:此图只适用于Node11.0.0版本以前的情况!...>> 七队列的具体作用 timers:执行满足条件的 setTimeout 、setInterval 回调; pending callbacks: 检索新的 I/O 事件;执行与 I/O 相关的回调...idle:仅仅供给Node系统内部使用 prepare:仅仅供给Node系统内部使用 poll:检索新的 I/O 事件;执行与 I/O 相关的回调(几乎所有情况下,除了关闭的回调函数,它们由计时器和...(红黑树时间复杂度O(lg(n)) ) setImmediate:的回调函数保存在链表中,每次Tick只执行链表中的一个回调函数。

    1.2K20

    了不起的回调函数

    关于js的回调函数,在各大平台已经被写烂了,我也看了很多别的大神写的帖子,我也在想怎么可以比较明白的将这个东西讲明白,今天我就尝试一下,认真看完,相信是有一些用处的。...想搞明白回调函数之前,先看懂我下面说的这段话, 有几个概念需要搞明白js中的同步和异步,或者叫阻塞和延迟,这就是为什么同步的函数有概率卡死,说直白一些,同步就是代码由上而下执行,中间如果有问题,那就等着...,直到问题解决掉代码才会接着执行,但是我们在写js的过程中,其实很少有这种情况,原因是js本身就是一个异步编程语言,所谓的异步就是你慢没事,我跳过你,你啥时候好了,你再执行,这句话反映到代码上就是延迟式编程也就是异步编程...,已经没有微任务可以执行了,上面这段话提供的信息和今天要说的回调函数有很大的关系,但是因为不是讲事件循环和宏微任务的,所以不展开说,下面说为什么一定要有回调函数 回调函数:正常的函数是由外往内传递参数进行使用参数...,回调函数是拿到参数之后反过来调用外部函数的一个过程,再说的简单一点,就是一个函数调用另一个函数,另一个函数的参数是他的父函数的形参,如果你觉得有点绕,我们开始写代码 代码演示: setTimeout(

    1.2K20

    「前端进阶」从多线程角度来看 Event Loop

    引子 几乎在每一本JS相关的书籍中,都会说JS是 单线程的,JS是通过事件队列 (EventLoop)的方式来实现异步回调的。...对很多初学JS的人来说,根本搞不清楚单线程的JS为什么拥有 异步的能力,所以,我试图从 进程、 线程的角度来解释这个问题。 CPU ? 算机的核心是 CPU,它承担了所有的计算任务。...请求 当请求完成时,若有回调函数,通知事件触发线程 当我们了解了渲染进程包含的这些线程后,我们思考两个问题: 为什么 javascript 是单线程的 为什么 GUI 渲染线程与 JS 引擎线程互斥 为什么...当代码执行到 setTimeout/setInterval时,实际上是 JS引擎线程通知 定时触发器线程,间隔一个时间后,会触发一个回调事件, 而 定时触发器线程在接收到这个消息后,会在等待的时间后,将回调事件放入到由...当代码执行到 XHR/fetch时,实际上是 JS引擎线程通知 异步http请求线程,发送一个网络请求,并制定请求完成后的回调事件, 而 异步http请求线程在接收到这个消息后,会在请求成功后,将回调事件放入到由

    68210

    面试官:为什么“false == ”都返回true?

    可能我还不够了解!有时我真的想不通它是如何工作的,看完这5个奇怪的问题,你就知道我为啥这么说了,你知道这些古怪问题的正确答案吗? 我们现在开始吧。...朋友们,请不要惊讶这确实是正确答案。 只要我们有了相等比较和相同的知识,我们就能完全理解它是怎么一回事了。...[]) // true 让我简要解释一下它是如何工作的。 当我们遇到一个布尔值和一个对象进行比较时,会将这两个值转换为数字进行最后的比较。 所以它会经历这些步骤。 // 1....我想你猜对了,答案是“fatfish”。不,不是!答案是“medium”。 这是因为在“try….catch….finally”语句中,finally子句无论是否抛出异常都会被执行。...请问‘{}’是最终结果吗? 不幸的是,这不是我们想象的那样。未定义的是最后的赢家。 因为‘{}’是fn函数的一个包含块,所以它等价于下面的代码。

    97010

    【动画演示】:事件循环 形象深动(JavaScript)

    在这个任务中,我们要等待30秒,然后才能执行接下来要做的事情(JS 默认运行在浏览器的主线程上,所以整个UI都卡住了)。 幸运的是,浏览器提供了 JS 引擎本身没有提供的一些特性:Web API。...调用堆栈是JS引擎的一部分,这不是浏览器特有的。堆栈里面的顺序是先进后出,当函数返回一个值时,它会从堆栈中弹出。 response函数返回一个setTimeout函数。...回调不会立即添加到调用堆栈中,而是会传递到队列中。 这可能是一个令人困惑的部分:它并不意味着在1000ms之后将回调函数添加到调用堆栈中,它只是在1000ms后添加到队列中。...回调函数被添加到调用堆栈中,被调用,并返回一个值,然后从堆栈中弹出。 通过动画演示看起来是很有趣的,但还是需要重复多看几遍,才能更好理解它们之间的关系。...我是小智,对前端技术保持学习爱好者。我会经常分享自己所学所看的干货,在进阶的路上,共勉!

    1K20

    JavaScript 运行机制详解:再谈Event Loop

    一年前,我写了一篇《什么是 Event Loop?》,谈了我对Event Loop的理解。...作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很复杂的同步问题。...三、事件和回调函数 "任务队列"是一个事件的队列(也可以理解成消息的队列),IO设备完成一项任务,就在"任务队列"中添加一个事件,表示相关的异步任务可以进入"执行栈"了。...要是当前代码耗时很长,有可能要等很久,所以并没有办法保证,回调函数一定会在setTimeout()指定的时间执行。...令人困惑的是,Node.js文档中称,setImmediate指定的回调函数,总是排在setTimeout前面。实际上,这种情况只发生在递归调用的时候。

    1.1K70

    分享 10 个前端开发者需要知道的 JS 技巧

    Promise 回调地狱 Promise 提供了一种优雅的方式来处理 JavaScript 中的异步操作。这也是避免“回调地狱”的解决方案之一。但是我并没有真正理解它的含义,所以我写了这个代码片段。...给一个函数设置太多参数 当一个函数的参数太多时,它的可读性就会降低,甚至,让我们想知道如何正确传递参数。 例子 我们想要获取用户的一些基本信息,比如姓名、性别、年龄等。...无意义的代码注释 与其不写代码注释,也不要写无意义的代码注释,因为这会浪费你的时间。 你不妨解释一下“a”的含义或使用有意义的变量名!...// ❌ const mw = 375 朋友,请不要向我学习,你应该给变量一个适当且有意义的名称。...其实,这种担心是完全没有必要的,因为以后用的可能性很小。就算以后会用到,也可以通过‘git’来追溯。 10. 超过一千行的组件代码 我在一个组件中编写了超过一千行代码。

    43740

    学js培训课程_java前端培训班

    但是js是单线程执行的,它并没有新开一个线程等到1秒后执行该线程。而是将回调函数放在setTimeout的回调队列里。即使1秒的时间到了,也要在执行完当前代码之后,才调用回调。...js中异步实现的四种方式:回调函数、事件监听、发布订阅、promise。 所谓回调函数,就是把任务的第二段单独写在一个函数里面,等到重新执行这个任务的时候,就直接调用这个函数。...使用回调函数的写法,往往导致代码形式可读性差,难以维护。为了解决这个问题,jquery提供了Deferred模块。当然还有其他的js库也有提供相关工具。...我曾经为了一个地图相关的项目,很多地图相关的js代码,但是没有用模块化,找个函数找半天,还不一定找对。...Js这门语言其实是初学者不容易掌握的,网上有的言论说js很容易学,其实个人觉得js并不容易学。

    1.3K10

    手写Express.js源码

    express.js里面就加了注释,这个函数是http.createServer的回调函数。...我这个例子因为只需要两个动词,就简化了,直接用数组了。这段代码其实给app创建了跟每个动词同名的函数,所有动词的处理函数都是一样的,都是去调router里面的对应方法来处理。...这段代码对我来说是比较奇怪的,我们在执行new Router()的时候其实执行的是new proto(),new proto()并不是我奇怪的地方,奇怪的是他设置原型的方式。...绕了一大圈,其实就是JS面向对象的使用,给router添加类方法,但是为什么使用这么绕的方式,而不是像我上面那个Class那样用呢?这我就不是很清楚了,可能有什么历史原因吧。...Express的主要工作是将http.createServer的回调函数拆出来了,构建了一个路由结构Router。 这个路由结构由很多层layer组成。 一个中间件就是一个layer。

    5.4K30

    如何理解JavaScript中的this

    JavaScript中的 this 对于初学者来说是个难点,对于老手也会困惑。之前有一个小伙伴一直问我this的相关问题,所以今天抽出点时间深入的带大家理解this。...希望通过我的理解能够对正在处于对this困惑的你指引方法,让你再也不用怕JavaScript中的this了,让你明白在各种情况下使用this。...说的极端点,如果你编写的 JS 采用函数式写法,而不是面向对象式,你所有的代码里 this 会少很多,甚至没有。...下面我将通过代码例子一一探讨每种情况是如何发生的,同时给出让this获取正确值的方法。 函数可以在一个对象里定义并将其作为自己当前的上下文环境,也可以被其他对象调用,从而将上下文环境换成那个对象。...使用this的方法被用作回调函数时 当使用this的方法作为回调函数传给其他函数时,这种情况就有点棘手。

    4.1K21

    【愚公系列】《AIGC辅助软件开发》042-AI辅助提升程序员求职、招聘与面试效率:用 ChatGPT 理解面试题

    一、用 ChatGPT 理解面试题 1.用 ChatGPT 理解面试题 在招聘前端程序员时,作为技术负责人,我们对前端领域的理解可能不是特别深入。...第一个 `then` 回调: - `setTimeout(() => { console.log('6'); }, 0);` 是一个宏任务,被放到宏任务队列中。...; console.log('5'); }); 这一段代码创建了一个新的 Promise 对象,并展示了 Promise 构造函数的同步执行行为和回调机制。...`console.log('5');` 虽然 `resolve()` 已经被调用,但这个函数并没有阻止后续同步代码的执行。...可以看到ChatGPT的这个回答非常有条理,我们可以验证一下结果。在VSCode用Node.js 调试一下,运行结果如图所示。

    11110

    36个助你成为专家需要掌握的JavaScript概念

    请花点时间理解下面提到的每一个概念。 1、调用栈执行 每个人都听说过Stack Overflow这个网站。但是你知道实际的堆栈溢出吗?堆栈溢出是与调用堆栈的操作相关联的错误。...你应该了解全局作用域、块和函数作用域,也称为词法作用域。 JS作用域一开始可能会让人很困惑,但是一旦你理解了它是如何工作的,使用它会非常令人兴奋。...在传递访问这个的回调时,你将特别需要bind方法。我是在帮助一个朋友调试他的代码时学到这一点的! 16、 构造函数和’instanceOf’操作符 构造函数就像常规函数一样。但是他们有很多不同之处。...尽管递归可能是一个让你头疼的令人困惑的概念,但是通过大量的练习,从一些小问题开始,你可以更好地理解它。 但是要注意,如果不小心使用递归,可能会遇到堆栈溢出错误。作为练习,对这个错误做一些研究。...如果它比目前已知的算法更好,你可能会成为下一个编程明星! 31、 继承、多态和代码重用 JavaScript中的继承与原型一起工作。这是因为JavaScript是非面向对象的语言。

    71220

    小心这个陷阱: 为什么JS中的 every()对空数组总返回 true

    在我的理解中,我认为回调函数必须被调用并返回true , every() 才会返回 true ,但实际上并非如此。...对于一个空数组, every() 无论回调函数是什么都会返回 true ,因为那个回调函数从未被调用过。...这只能发生的唯一原因是如果回调函数没有被调用,而 every() 的默认值是 true 。但是,为什么在没有值来运行回调函数时,空数组会返回 true 给 every() 呢?...如果数组中没有任何项目,那么就没有机会执行回调函数,因此,该方法无法返回 false 。 现在的问题是:为什么 every() 会表现出这样的行为?...如果你也对这个行为感到困惑,那么我建议你改变阅读 every() 调用的方式。不要把 every() 理解为“这个数组中的每一项是否都符合这个条件?”

    22320

    python异步并发框架

    并发与并行 好了,让我们先把纠结的异步放下,来看看另外两个容易混淆的概念。 估计您已经从视频里听了我办港澳通行证的惨痛经历了,这里就不重复了,但仍然用这个例子来解释一下并发和并行的概念吧。...但是我们可以通过它看到一个异步框架应该有的东西: 用于创建与框架契合的、非阻塞的 I/O 对象的接口有一个主循环,用户可以启动它用户可以在关心的事件发生时,执行自己的代码 回调函数和 Tornado 让我们以...其中 add_handler() 的调用就是——我认为—— Tornado 的经典用法,也就是注册回调函数。... yield 中,endpoint.connect() 返回的是一个 Deferred 对象,其回调函数的参数才是前面的 client 对象。...asyncio 作为又一个异步并发框架,与其他现有框架差别并不大:主循环类似于 Twisted 的 reactor,Future 对回调函数进行封装类似于 Deferred,可选的微线程类似于 inlineCallbacks

    2.5K10

    Ajax技术详解(上)

    JSONP的理念就是,与服务端约定好了一个回调函数名,服务端接收到请求后,将返回一段Javascript,在这段Javascript代码中调用约定好的回调函数,并且将数据作为参数进行传递。...当网页接收到这段Javascript代码后,就会执行这个回调函数,这时数据已经成功传输到客户端了。...,与服务端约定好了一个回调函数名,服务端接收到请求后,将返回一段Javascript, // 在这段Javascript代码中调用约定好的回掉函数,并且将数据作为参数进行传递. // 当网页接收到这段Javascript...当网页接收到这段Javascript代码后,就会执行这个回调函数,这时数据已经成功传输到客户端了。...: 若需要请求多个接口,那就意味着需要多次发送ajax请求,那写出来的代码光缩进看的人都恶心了,这个问题被称之为回调地狱,若在回调函数中进行带逻辑的判断写出来的代码可读性和可维护性更是难以操控。

    2K20

    第七篇:React-Hooks 设计动机与工作模式(下)

    useEffect 快速上手 useEffect 可以接收两个参数,分别是回调函数与依赖数组。...仅在挂载阶段和卸载阶段执行的副作用:传入回调函数,且这个函数的返回值是一个函数,同时传入一个空数组。假如回调函数本身记为 A, 返回的函数记为 B,那么将在挂载阶段执行 A,卸载阶段执行 B。...每一次渲染都触发,且卸载阶段也会被触发的副作用:传入回调函数,且这个函数的返回值是一个函数,同时不传第二个参数。...状态复用:Hooks 将复杂的问题变简单 过去我们复用状态逻辑,靠的是 HOC(高阶组件)和 Render Props 这些组件设计模式,这是因为 React 在原生层面并没有为我们提供相关的途径。...对于组件状态复用这个问题,包括 HOC、Render Props 和自定义 Hook,现在我对你的预期是“知道有这回事就可以了”。如果你实在着急,可以先通过文档中的相关内容简单了解一下。

    87610

    关于js中的回调函数callback

    原创作者:Cayley,京程一灯特邀作者 Cayley 一个不断努力学习的女程序员 前言 其实我一直很困惑关于js 中的callback,困惑的原因是,学习中这块看的资料少,但是平时又经常见,偶尔复制一下前人代码...以上解释是Google得出的解释,非常清晰简明,有时候我觉得英文理解要比翻译成中文二次理解更清楚 来看几个经典的回调函数代码,我敢保证你一定用过他们 ? 异步请求的回调函数 ?...同步回调的例子 所以回调与同步、异步并没有直接的联系,回调只是一种实现方式,既可以有同步回调,也可以有异步回调,还可以有事件处理回调和延迟函数回调,这些在我们工作中有很多的使用场景 所以其实并不是我们不认识回调函数...,而是我们都萦绕在了这个“callback“ 这个词上,当你在一个函数中看到它是就会困惑,其实它只是一个形参名字而已。...1.关于回调函数和js单线程以及js异步机制 我们都知道js是单线程的,这种设计模式给我们带来了很多的方便之处,我们不需要考虑各个线程之间的通信,也不需要写很多烧脑的代码,也就是说js的引擎只能一件一件事的去完成和执行相关的操作

    5.6K50
    领券