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

常见的三个 JS 面试题

通过对事件对应的回函数进行包裹、以自由变量的形式缓存时间信息,最后用 setTimeout 来控制事件的触发频率。...现在一起实现一个 throttle: // fn是我们需要包装的事件回, interval是时间间隔的阈值 function throttle(fn, interval) { // last为上一次触发回的时间...= this // 保留调用时传入的参数 let args = arguments // 记录本次触发回的时间 let now = +new Date...function throttle(fn, delay) { // last为上一次触发回的时间, timer是定时器 let last = 0, timer = null // 将throttle...let args = arguments // 记录本次触发回的时间 let now = +new Date() // 判断上次触发的时间和本次触发的时间差是否小于时间间隔的阈值

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

Javascript 面试中经常被问到的三个问题!

clicked on item: ' + item.innerHTML) } }) }) 问题 2: 在循环中使用闭包 闭包常常出现在面试中,以便面试官衡量你对 JS 的熟悉程度,以及你是否知道何时使用闭包...现在一起实现一个 throttle: // fn是我们需要包装的事件回, interval是时间间隔的阈值 function throttle(fn, interval) { // last为上一次触发回的时间...= this // 保留调用时传入的参数 let args = arguments // 记录本次触发回的时间 let now = +new Date...function throttle(fn, delay) { // last为上一次触发回的时间, timer是定时器 let last = 0, timer = null // 将throttle...let args = arguments // 记录本次触发回的时间 let now = +new Date() // 判断上次触发的时间和本次触发的时间差是否小于时间间隔的阈值

85620

90行代码,15个元素实现无限滚动

是否进入可视区域 intersectionRatio: 相交区域和目标元素的比例值,进入可视区域,值大于0,否则等于0 2.3 options 调用IntersectionObserver时,除了传一个回函数...,还可以传入一个option对象,配置如下属性: threshold: 决定了什么时候触发回函数。...它是一个数组,每个成员都是一个门槛值,默认为[0],即交叉比例(intersectionRatio)达到0时触发回函数。用户可以自定义这个数组。...比如,[0, 0.25, 0.5, 0.75, 1]就表示当目标元素 0%、25%、50%、75%、100% 可见时,会触发回函数。...原理 实现一个组件,可以显示具有15个元素的固定窗口大小的n个项目的列表: 即在任何时候,无限滚动n元素上也仅存在15个DOM节点。 ?

2.9K20

Webpack 插件架构深度讲解

基本用法 Tapable 使用时通常需要经历如下步骤: 创建钩子实例 调用订阅接口注册回,包括:tap、tapAsync、tapPromise 调用发布接口触发回,包括:call、callAsync...调用发布接口触发回 sleep.call(); // 运行结果: // callback A 示例中使用 tap 注册回,使用 call 触发回,在某些钩子中还可以使用异步风格的 tapAsync...constructor() { this.hooks = { sleep: new SyncHook(), }; } sleep() { // 触发回...异步风格 上述示例中,触发回时用到了钩子的 call 函数,我们也可以选择异步风格的 callAsync ,选用 call 或 callAsync 并不会影响回的执行逻辑:按注册顺序依次执行 + 忽略回执行结果...constructor() { this.hooks = { sleep: new SyncHook(), }; } sleep() { // 触发回

1.6K20

重绘与回流_html回流重绘

文章目录 css图层 图层创建的条件 重绘(Repaint) 回流 触发重绘的属性 触发回流的属性 常见的触发回流的操作 优化方案 requestAnimationFrame—-请求动画帧 写在最后 学习目标...1.参数:该方法使用一个回函数作为参数,这个回函数会在浏览器下一次重绘之前调用。...回函数会被自动传入一个参数,DOMHighResTimeStamp,标识requestAnimationFrame()开始触发回函数的当前时间 2.返回值: 一个 long 整数,请求 ID ,是回列表中唯一的标识...你可以传这个值给 window.cancelAnimationFrame() 以取消回函数。...备注:若你想在浏览器下次重绘之前继续更新下一帧动画,那么回函数自身必须再次调用window.requestAnimationFrame() 2.window.cancelAnimationFrame(

1.3K20

Vue3 watch 与 watchEffect

导图大纲watch侦听一个或多个响应式数据源,并在数据源变化时调用所给的回函数。watch() 默认是懒侦听的,即仅在侦听源发生变化时才执行回函数。...这个回函数接受三个参数:新值、旧值,以及一个用于注册副作用清理的回函数。该回函数会在副作用下一次重新执行前调用,可以用来清除无效的副作用,例如等待中的异步请求。.... */})第三个参数第三个可选的参数是一个对象;immediate:在侦听器创建时立即触发回。第一次调用时旧值是 undefined。...deep:如果源是对象,强制深度遍历,以便在深层级变更时触发回。参考深层侦听器。flush:调整回函数的刷新时机。参考回的刷新时机及 watchEffect()。...它不会追踪任何在回中访问到的东西。另外,仅在数据源确实改变时才会触发回。watch 会避免在发生副作用时追踪依赖,因此,我们能更加精确地控制回函数的触发时机。<!

29000

PHP进阶之利用Swoole实现一个简单的WebSocket多人聊天室

关闭连接 onOpen事件回是可选的 2、当服务器收到来自客户端的数据帧时会回onMessage函数,客户端发来数据,我们再此函数来将数据广播出去就形成了聊天,经过各种处理形成一个成型的聊天室 Swoole...连接 $clientFds = []; # 创建websocket服务 $server = new swoole_websocket_server("0.0.0.0", 9501); # 握手成功 触发回函数...success with fd{$request->fd}\n"; # 将所有客户端连接标识,握手成功后保存到数组中 $clientFds[] = $request->fd; }); # 收到消息 触发回函数...发送广播通知所有用户 foreach ($clientFds as $fd) { $server->push($fd, $frame->data); } }); # 关闭连接 触发回函数...118.25.224.221:9501"); ws.onopen = function() { console.log("连接成功"); }; //收到消息 触发回

3.3K20

RPC-client异步收发核心细节?

异步调用的代码片段为: Add(Obj1, Obj2, callback);// 调用后直接返回,不等结果 处理结果通过回调得到: callback(Result){// 得到处理结果后会调用这个回函数...所谓异步回,在得到结果之前,不会处于阻塞状态,理论上任何时间都没有任何线程处于阻塞状态,因此异步回的模型,理论上只需要很少的工作线程与服务连接就能够达到很高的吞吐量。...(2)怎么知道哪个响应包与哪个回函数对应? 回答:这是通过【请求id】来实现请求-响应-回的串联的。 ?...整个处理流程如上,通过请求id,上下文管理器来对应请求-响应-callback之间的映射关系: 1)生成请求id 2)生成请求上下文context,上下文中包含发送时间time,回函数callback...打在请求包里发给RPC-server 5)RPC-server将req-id打在响应包里返回 6)由响应包中的req-id,通过上下文管理器找到原来的上下文context 7)从上下文context中拿到回函数

3.1K162

在 Vue 中使用lodash对事件进行防抖和节流

通过对事件对应的回函数进行包裹、以自由变量的形式缓存时间信息,最后用 setTimeout 来控制事件的触发频率。...现在一起实现一个 throttle: // fn是我们需要包装的事件回, interval是时间间隔的阈值 function throttle(fn, interval) { // last为上一次触发回的时间...= this // 保留调用时传入的参数 let args = arguments // 记录本次触发回的时间 let now = +new Date...function throttle(fn, delay) { // last为上一次触发回的时间, timer是定时器 let last = 0, timer = null // 将throttle...let args = arguments // 记录本次触发回的时间 let now = +new Date() // 判断上次触发的时间和本次触发的时间差是否小于时间间隔的阈值

1.9K20

浏览器访问一个网站所经历的步骤

什么是回?   回是异步编程时的基础,将后续逻辑封装成起始函数的参数,逐层嵌套   2. 什么是同步/异步?   同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。   ...异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。   3. 什么是I/O?   磁盘的写入(in)磁盘的读取(out)   4. 什么的单线程/多线程?   ...为了某个事件注册了回函数,但是这个回函数不是马上执行,只有当事件发生的时候,才会调用回函数,这种函数执行的方式叫做事件驱动~这种注册回就是基于事件驱动的回,如果这些回调和异步I/O(数据写入、...事件循环Eventloop,倘若有大量的异步操作,一些I/O的耗时操作,甚至是一些定时器控制的延时操作,它们完成的时候都要调用相应的回函数,从而来完成一些密集的任务,而又不会阻塞整个程序执行的流程,此时需要一种机制来管理...总而言之就是:管理大量异步操作的机制叫做事件循环   Event Loop:   回函数队列。异步执行的函数会被压入这个队列; 队列被循环查询。

89290

浏览器访问一个网站所经历的步骤

什么是回? 回是异步编程时的基础,将后续逻辑封装成起始函数的参数,逐层嵌套 2. 什么是同步/异步? 同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。...异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。 3. 什么是I/O? 磁盘的写入(in)磁盘的读取(out) 4. 什么的单线程/多线程?...为了某个事件注册了回函数,但是这个回函数不是马上执行,只有当事件发生的时候,才会调用回函数,这种函数执行的方式叫做事件驱动~这种注册回就是基于事件驱动的回,如果这些回调和异步I/O(数据写入、...事件循环Eventloop,倘若有大量的异步操作,一些I/O的耗时操作,甚至是一些定时器控制的延时操作,它们完成的时候都要调用相应的回函数,从而来完成一些密集的任务,而又不会阻塞整个程序执行的流程,此时需要一种机制来管理...总而言之就是:管理大量异步操作的机制叫做事件循环 Event Loop: 回函数队列。异步执行的函数会被压入这个队列; 队列被循环查询。

1.3K90
领券