0%

面试的时候经常会被问到,事件代理是利用了事件的什么机制?一般我们都会说,是利用了事件冒泡机制,但具体冒泡机制在事件代理的过程了起到了什么关键作用,我想大部分人也是不了解的。静下心来,仔细看了下有关事件和事件代理问题,自己终于找到了合适的答案。

在揭晓答案之前,还是来看一下事件的基本知识

事件操作在项目中使用频繁,jQuery封装了我们对DOM的事件操作,NodeJS中也有 events 这个事件操作模块,几乎各种语言都有事件模型,事件使用频繁,事件模型可以使我们从复杂的业务中抽象出独立的逻辑,跨越模块与模块之间传递数据,以达到类似解耦的概念。

不同的环境有不同的事件模型,在浏览器中,DOM事件模型比较特殊,重温一下DOM事件模型,再来自定义一个事件模型。

Read more »

为什么JavaScript是单线程?

JavaScript是一门==单线程非阻塞==的脚本语言,目的是为了实现与浏览器交互。

Read more »

纯函数:

纯函数是这样一种函数,即相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用。

Read more »

定义

​ TypeScript is a typed(静态类型,不同于JS的动态类型) superset of JavaScript that compiles to plain JavaScript(TS不能直接运行,需要先编译成JS).Any browser. Any host. Any OS. Open source.

Read more »

​ 缘起:前段时间,看dom diff算法那块的时候,看到了列表对比那块用到了edit distance算法,例如p, ul, div 的顺序换成了 div, p, ul。这个该怎么对比?如果按照同层级进行顺序对比的话,它们都会被替换掉。如 pdivtagName不同,p会被div所替代。最终,三个节点都会被替换,这样DOM开销就非常大。而实际上是不需要替换节点,而只需要经过节点移动就可以达到,我们只需知道怎么进行移动。

​ 将这个问题抽象出来其实就是字符串的最小编辑距离问题(Edition Distance),最常见的解决方法是 Levenshtein Distance , Levenshtein Distance 是一个度量两个字符序列之间差异的字符串度量标准,两个单词之间的 Levenshtein Distance 是将一个单词转换为另一个单词所需的单字符编辑(插入、删除或替换)的最小数量。Levenshtein Distance 是1965年由苏联数学家 Vladimir Levenshtein 发明的。Levenshtein Distance 也被称为编辑距离(Edit Distance),通过动态规划求解,时间复杂度为 O(M*N)

Read more »

Union-Find算法也就是常说的并查集算法,主要用来解决图论中动态连通性问题。

Read more »

最近最少使用算法(LRU)是大部分操作系统为最大化页面命中率而广泛采用的一种页面置换算法。该算法的思路是,发生缺页中断时,选择未使用时间最长的页面置换出去。从程序运行的原理来看,最近最少使用算法是比较接近理想的一种页面置换算法,这种算法既充分利用了内存中页面调用的历史信息,又正确反映了程序的局部问题。下面将采用双向链表+哈希表实现。

Read more »

let和const

为了加强对变量生命周期的控制,ES6引入了块级作用域

Read more »