zhangdizhangdi

JavaScript

学习资料

网站

博客/GitHub

面试相关

题目

类型判断、深浅克隆

原型、原型链、继承

作用域、闭包

this

Promise

浏览器工作原理

节流、防抖

DOM事件流

事件流的都会经过三个阶段: 捕获阶段 -> 目标阶段 -> 冒泡阶段。

  • 捕获是指事件从最顶层的元素(通常是document对象)开始,然后向下传播到目标元素。
  • 冒泡是从目标元素开始,然后向上传播到DOM树中更高的层次,直到达到最顶层的元素(通常是document对象)。

大多数浏览器都会先执行捕获阶段,然后是冒泡阶段,但除非你明确指定了使用捕获(通过设置事件监听器的第三个参数为true),否则事件监听器默认是在冒泡阶段执行的。

addEventListener(eventType, handler, useCapture)

事件委托/代理

事件委托,会把一个或者一组元素的事件委托到它的父层或者更外层元素上,真正绑定事件的是外层元素,而不是目标元素。

当我们想在用户与大量的子元素中的任何一个互动时运行一些代码时,我们在它们的父元素上设置事件监听器,让发生在它们身上的事件冒泡到它们的父元素上,而不必在每个子元素上单独设置事件监听器。

错误类型

类型:

  • Error:基础通用的构造函数
  • EvalError:与 eval() 有关
  • RangeError:数值变量或参数超出其有效范围
  • ReferenceError:无效引用
  • SyntaxError:语法错误
  • TypeError:变量或参数不属于有效类型
  • URIError:给 encodeURI() 或 decodeURI() 传递的参数无效

尾调用和尾递归

尾调用,就是指某个函数的最后一步是调用另一个函数。
只要有别的操作,就不属于尾调用。

函数调用自身,称为递归。
如果尾调用自身,就称为尾递归。

函数式编程

纯函数

  • 相同的输入总是产生相同的输出
  • 函数对外部状态没有依赖,也不会改变外部状态
  • 函数不会修改传入的参数,而是返回一个新的值,保持输入参数的不可变性
  • 函数的执行过程对于调用者来说是透明的,即调用者不需要了解函数的内部实现细节,只需要关注输入和输出

高阶函数

至少满足一个条件的函数:

  • 接受一个或多个函数作为输入
  • 输出一个函数

柯里化

接收一部分参数,返回一个函数接收剩余参数,接收足够参数后,执行原函数

面试手写题

收藏文章