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

谁说你只是会用jQuery?

祭出一张画了好久的图 上面大概是zepto中on形式注册事件的大致流程,好啦开始看源码啦,首先是on函数,它主要做的事情是注册事件前的参数处理,真正添加事件是内部函数add。...,这里先不做解析,只要知道他就是移除事件的函数就可以,当移除事件的时候,再执行了传进来的回调函数。...:以当前目标元素e.target为起点向上查找到最先符合selector选择器规则的元素,然后扩展了事件对象,添加了一些属性,最后以找到的match元素作为回调函数的内部this作用域,并将扩展的事件对象作为回调函数的第一个参数传进去执行...我们来看看,每个key的数组都长啥样 [ { e: 'click', // 事件名称 fn: function () {}, // 用户传入的回调函数 i: 0, // 该对象在该数组中的索引...fn: function () {}, // 用户传入的回调函数 i: 1, // 该对象在该数组中的索引 ns: 'qianlongo', // 命名空间 proxy:

1.3K60

谁说你只是会用jQuery?

祭出一张画了好久的图 上面大概是zepto中on形式注册事件的大致流程,好啦开始看源码啦,首先是on函数,它主要做的事情是注册事件前的参数处理,真正添加事件是内部函数add。...,这里先不做解析,只要知道他就是移除事件的函数就可以,当移除事件的时候,再执行了传进来的回调函数。...:以当前目标元素e.target为起点向上查找到最先符合selector选择器规则的元素,然后扩展了事件对象,添加了一些属性,最后以找到的match元素作为回调函数的内部this作用域,并将扩展的事件对象作为回调函数的第一个参数传进去执行...我们来看看,每个key的数组都长啥样 [ { e: 'click', // 事件名称 fn: function () {}, // 用户传入的回调函数 i: 0, // 该对象在该数组中的索引...fn: function () {}, // 用户传入的回调函数 i: 1, // 该对象在该数组中的索引 ns: 'qianlongo', // 命名空间 proxy:

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

    MutationObserver详解+案例——深入理解 JavaScript 中的 MutationObserver:原理与实战案例

    的变化与差异),我们也知道在 Vue2 中 watch 的底层是通过 Vue 中的一个叫做 hasChange 的函数来判断参数是否变化,而深层监听则是添加了遍历的操作,在 Vue3 中由于使用 proxy...它可以在 DOM 树发生以下变化时执行回调函数: 元素的子树发生变化(子节点的添加、删除或重排序)。 元素的属性发生变化。 元素的文本内容发生变化。...二、MutationObserver 的工作原理 MutationObserver 通过异步方式监测 DOM 变化,这意味着当 DOM 变化发生时,MutationObserver 不会立即执行回调函数...1、基本用法 使用 MutationObserver 的基本步骤如下: 创建一个 MutationObserver 实例,传入一个回调函数。...创建一个 MutationObserver 实例,并传入回调函数 const observer = new MutationObserver((mutationsList, observer) => {

    26400

    JavaScript 函数回调风险

    问题的根源: toReadableNumber 不是为了作为 array.map 的回调而设计的,所以安全的做法是创建你自己的用于与 array.map 一起使用的函数: const readableNumbers...toReadableNumber 的开发人员现在可以在不破坏我们的代码的情况下添加参数。...window.requestAnimationFrame(callback) 告诉浏览器——你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。...该方法需要传入一个回调函数作为参数,该回调函数会在浏览器下一次重绘之前执行 更容易发现问题的例子: const parsedInts = ['-10', '0', '10', '20', '30']...el.addEventListener(name, callback, { signal }) 总结 在使用第三方函数时,除非是专门为当前场景所设计的,否则需要注意回调函数和选项对象的问题!

    47320

    精读《vue-lit 源码》

    其中响应式能力与模版能力分别是 @vue/reactivity、lit-html 这两个包提供的,我们只需要从源码中寻找剩下的两个功能:如何在修改值后触发模版刷新,以及如何构造生命周期函数的。...effect 回调函数,实现了 “值变化后重渲染” 的功能。...而生命周期函数还有一个特点,即并不分组件实例,因此必须有一个 currentInstance 标记当前回调函数是在哪个组件实例注册的,而这个注册的同步过程就在 defineComponent 回调函数...= null 这样,我们就将 currentInstance 始终指向当前正在执行的组件实例,而所有生命周期函数都是在这个过程中执行的,因此当调用生命周期回调函数时,currentInstance...这也说明了浏览器 API 分层的清晰之处,只提供创建和销毁的回调,而更新机制完全由业务代码实现,不管是 @vue/reactivity 的 effect 也好,还是 addEventListener 也好

    59640

    参与者模式

    参与者模式 JavaScript中的参与者模式,就是在特定的作用域中执行给定的函数,并将参数原封不动的传递,参与者模式不属于一般定义的23种设计模式的范畴,而通常将其看作广义上的技巧型设计模式。...,不过相对于解决的问题来说这种消耗还是值得的,因此它常用于事件,setTimeout或setInterval等异步逻辑中的回调函数。...type, fn); }else{ dom["on"+ type] = fn; } } 这样对于事件绑定是完全可以的,但是我们不能传入一些参数以保持回调函数内部的词法作用域的数据的完整性...,所以我们在回调函数中下点文章。...(type, function(e){ fn.call(dom, e, data) }) } } 这样又导致了新问题,添加的事件回调函数不能移除了,所以还需要对其改进

    62730

    Array.forEach实战详解:简化循环与增强代码可读性;Array.forEach怎么用;面对大量数据时怎么提高Array.forEach的性能

    Array.forEach:简化循环与增强代码可读性 一、引言 在现代Web开发中,Vue.js以其响应式和组件化的特性,成为了许多前端开发者的首选框架。...:对数组的每个元素执行的函数,接受三个参数:当前元素的值、当前元素的索引、原数组。...thisArg:执行回调时使用的this值。 2、返回值 Array.forEach不返回任何值(没有返回值)。...避免副作用:Array.forEach不改变原数组,这有助于避免潜在的错误。 4、Array.forEach vs for 循环 for循环提供了更多的控制,如跳过迭代或提前退出循环。...5、Array.forEach()使用技巧 array.forEach()用于对数组中的每个元素执行给定的函数,关键在于回调函数怎么写。

    10700

    【前端面试】this的指向

    ,其内的 this 一般都是window,严格模式下为undefined 3、回调函数中的this为window或者undefined,除非做过特殊处理(如:数组的forEach方法·) [1,2,3]....forEach(function(){ console.log(this); //window }); //forEach对内部this进行处理 [1,2,3].forEach(function...(){ console.log(this); //{a:10} },{a:10}) 四、箭头函数中的this 箭头函数中没有自己的this,所用到的this都是上下文中的this 箭头函数可以保留...都可以强制改变this的指向 1、call和apply 都是立即执行函数,并且改变函数中的this,再并且给函数传递参数 call执行的函数,如果有参数,则以“,”方式一个个去添加 apply执行的函数...2、bind并不会把函数立即执行,它是预先处理函数中的this和参数的 bind绑定的函数有参数,和call中的参数传递一样 bind方法在react中大量使用 var obj = {

    18210

    【前端工具类】002-监听窗口尺寸变化工具类:WindowSizeTracker

    定义一个接口用于描述窗口尺寸信息 interface WindowSize { width: number; height: number; } // 定义一个类型别名,表示窗口尺寸改变时的回调函数类型...WindowSizeChangeListener = (size: WindowSize) => void; export class WindowSizeTracker { // 储存窗口尺寸改变时的回调函数...WindowSize = { width: window.innerWidth, height: window.innerHeight, }; // 定义一个方法用于添加窗口尺寸改变时的回调函数...listener(this.size); this.listeners.push(listener); } // 定义一个方法用于移除窗口尺寸改变时的回调函数...tracker.addListener((size) => { console.log(`窗口尺寸已改变为:${size.width} x ${size.height}`); }); // 移除上面添加的回调函数

    4000

    JavaScript数组方法详解

    () ES5- 反向查询并返回数据的索引 否 forEach() ES6- 参数为回调函数,会遍历数组所有的项,回调函数接受三个参数,分别为value,index,self;forEach没有返回值 否...map() ES6- 同forEach,同时回调函数返回数据,组成新数组由map返回 否 filter() ES6- 同forEach,同时回调函数返回布尔值,为true的数据组成新数组由filter...forEach接收的回调函数会根据数组的每一项执行,该回调函数默认有三个参数,分别为:遍历到的数组的数据,对应的索引,数组自身。...index:元素对应的索引 self:数组自身 (1)功能1 因为要判断数组中的每一项,只要有一个回调函数返回true,some都会返回true,所以与every正好相反,当遇到一个回调函数的返回值为...参数:reduce()接收一个或两个参数:第一个是回调函数,表示在数组的每一项上调用的函数;第二个参数(可选的)作为归并的初始值,被回调函数第一次执行时的第一个参数接收。

    82110

    JS数组方法大全

    - 返回数组对象的原始值 n indexOf() ES5 查询并返回数据的索引 n lastIndexOf() ES5 反向查询并返回数据的索引 n forEach() ES5 参数为回调函数,会遍历数组所有的项...,回调函数接受三个参数,分别为value,index,self;forEach没有返回值 n map() ES5 同forEach,同时回调函数返回数据,组成新数组由map返回 n filter() ES5...同forEach,同时回调函数返回布尔值,为true的数据组成新数组由filter返回 n every() ES5 同forEach,同时回调函数返回布尔值,全部为true,由every返回true...forEach接收的回调函数会根据数组的每一项执行,该回调函数默认有三个参数,分别为:遍历到的数组的数据,对应的索引,数组自身。...参数:reduce()接收一个或两个参数:第一个是回调函数,表示在数组的每一项上调用的函数;第二个参数(可选的)作为归并的初始值,被回调函数第一次执行时的第一个参数接收。

    4.4K10
    领券