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

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

让我们开始吧!注意,我们将在下面的示例中使用原生 JavaScript,因为面试官通常希望了解你在没有 jQuery 等库帮助下对JavaScript 和 DOM 理解程度。...经过 3 秒后,执行函数并打印出 i 值,该值在循环结束时为 4,因为它循环经过0,1,2,3,4并且循环最终停止在 4。...,它是 “裁判” 决定是否停止比赛依据,最后,等待比赛结果就对应到函数执行。...直到“一段时间”到了,第一次触发 scroll 事件对应才会执行,而“一段时间内”触发后续 scroll 都会被节流阀无视掉。...对比 throttle 来理解 debounce: 在 throttle 逻辑里, ‘裁判’ 说了算,当比赛时间到时,就执行函数

86220

常见三个 JS 面试题

让我们开始吧!注意,我们将在下面的示例中使用原生 JavaScript,因为面试官通常希望了解你在没有 jQuery 等库帮助下对JavaScript 和 DOM 理解程度。...经过 3 秒后,执行函数并打印出 i 值,该值在循环结束时为 4,因为它循环经过0,1,2,3,4并且循环最终停止在 4。...,它是 “裁判” 决定是否停止比赛依据,最后,等待比赛结果就对应到函数执行。...直到“一段时间”到了,第一次触发 scroll 事件对应才会执行,而“一段时间内”触发后续 scroll 都会被节流阀无视掉。...对比 throttle 来理解 debounce: 在 throttle 逻辑里, ‘裁判’ 说了算,当比赛时间到时,就执行函数

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

事件防抖和节流

/** * 函数节流 * 作用:一段时间内多次操作,只按照第一次触发开始计算,并在计时结束时给予响应。...函数,设置间隔时间为1s const better_scorll = throttle(() => { console.log("触发了滚动事件"); }, 1000); document.addEventListenner...并将id赋值给timer * 然后如果再次点击重复上面的操作,一直到delay时间内没点时,定时器执行 * 执行时:使用call调用传入函数,并传入参数 * */ 使用:在 onScorll...* 函数,拿到当前时间戳 * 判断,是否小于间隔时间: * 小于:则清楚定时器,然后重新生成定时器。...定时器直接赋值,然后call函数, * 大于:直接赋值,然后call函数, */ 使用:在 onScorll 中使用加强版 throttle // 用throttle来包装scroll const

51820

老生常谈函数防抖与节流

生活化理解:英雄技能条,技能条读完才能使用技能(R大招60s) 防抖实现方式分两种 “立即执行” 和 “非立即执行”,区别在于第一次触发时,是否立即执行函数。...“立即执行防抖” 指事件触发后,函数会立即执行,之后要想触发执行函数,需等待 n 秒延迟 // e.g....,函数在时间段结束时执行。...:“时间戳”方式让函数在时间段开始执行(第一次触发立即执行),“定时器”方式让函数在最后一次事件触发后(4.2s)也能触发。...“防抖” 与 “节流” 异同 相同:都是防止某一时间段函数被频繁调用执行,通过时间频率控制,减少函数执行次数,来实现相关性能优化。

63440

JavaScript调节器:提高程序性能

调节器是浏览器中通过限制代码要处理事件数量来提高性能常用技术。当你想以受控速率执行时,应该使用调节器,它允许你在每个固定时间间隔重复处理过渡状态。...相反,我们对其进行限制,仅每 100 毫秒检查一次滚动,这样每秒仅获得10个。用户仍然可以立即感觉到响应,但是计算效率更高。 调节器用于创建均匀间隔函数调用。...想象一下,如果你在事件处理程序函数执行大量计算或 API 请求。通过限制这些,可以防止应用冻结或对服务器发出不必要地请求。 JavaScript调节器实现 让我们立即进入调节器代码。...然后检查运行是否超时(即激活调节器)。如果调节器生效,那么 throttledEventHandler 已经完成了该执行并等待执行。如果调节器为非活动状态,则可以用回函数立即处理该事件。...这时则会跳过执行,这可以使我们免于执行 CPU 密集型任务或调用我们 API。

89000

详解 JS 中事件循环、宏微任务、Primise对象、定时器函数,以及其在工作中应用和注意事项

如果队列中有微任务,就一直执行微任务直到队列清空。 执行一个宏任务(由 setTimeout() 或 setInterval() 设置)。 宏任务执行完毕后,再次执行所有微任务。...JavaScript 是单线程,如果事件队列中有其他任务在执行,定时器可能会延迟执行。...setImmediate 是一个在 Node.js 环境中使用函数,用于安排一个函数在当前事件循环结束后、下一次事件循环开始前被立即执行。...process.nextTick 是 Node.js 环境中一个函数,它用于在 Node.js 事件循环的当前阶段完成后、下一个事件循环阶段开始之前,安排一个函数尽快执行。...nextTick 允许你在 DOM 更新完成后立即运行函数,这对于 DOM 依赖操作非常有用。

7710

你所不知道setTimeout

它们将被传入推迟执行函数函数)。...最后那两个参数,将在1000毫秒之后函数执行时,作为函数参数。...setTimeout注意点 setTimeout()中函数this 如果被setTimeout推迟执行函数是某个对象方法,那么该方法中this关键字将指向全局环境,而不是定义时所在那个对象...比如,网页开发中,某个事件先发生在子元素,然后冒泡到父元素,即子元素事件函数,会早于父元素事件函数触发。...在函数A中,setTimeout将函数B推迟到下一轮Loop执行,这样就起到了,先触发父元素函数C目的了。 用户自定义函数,通常在浏览器默认动作之前触发。

1.8K121

解释 JavaScript 中计时器工作原理

现实生活中计时器另一个很好例子是应用程序广告。当您打开任何应用程序时,它会在 2 到 3 分钟后开始显示广告,并在 1 到 2 分钟间隔更改广告。...let timeoutId = setTimeout(callback, delay); 在上面的语法中,函数也可以是要执行箭头函数。 参数  – 这是一个在延迟时间后执行函数。...";          }             使用 setInterval() 函数在每个间隔执行函数 setTimeOut() 函数执行一次函数...setInterval(callback, interval) 参数  – 它是一个在每个间隔后调用 setInterval() 函数函数。...间隔 – 是在每个间隔后调用回函数时间(以毫秒为单位)。 返回值 setInterval() 函数还返回唯一 id, setTimeout() 函数,我们可以用来停止计时器。

1.5K20

JavaScript 异步编程

异步编程方案有哪些 JavaScript 异步编程方案各有什么优缺点 回答关键点 阻塞 事件循环 函数 JavaScript 是一种同步、阻塞、单线程语言,一次只能执行一个任务。...异步 异步函数作为参数传递给在后台执行其他函数。当后台运行代码结束,就调用回函数,通知工作已经完成。...因为控制权在第三方( Ajax),由第三方来调用回函数,无法确定调用是否符合预期。 多层嵌套会产生地狱(callback hell)。 2....主要特征如下: setTimeout:经过任意时间后运行函数,递归 setTimeout 在 JavaScript 线程不阻塞情况下可保证执行间隔相同。...setInterval:允许重复执行一个函数,并设置时间间隔,不能保证执行间隔相同。 requestAnimationFrame:以当前浏览器/系统最佳帧速率重复且高效地运行函数方法。

95500

从setTimeout分析浏览器线程

)   0秒延迟,此将会放到一个能立即执行时段进行触发。...浏览器内核线程分析   初学JavaScript时出现过一个误区:JavaScript引擎是多线程,定时器函数是异步执行。...arguments.callee, 10); }, 10); setInterval(function(){ /* 代码块... */ }, 10);   两段代码看似效果相同,其实不然,第一段中函数...,理论时间间隔<=10ms 案例2 ajax异步请求是否真异步   XMLHttpRequest请求在连接后是异步,请求是由浏览器新开一个线程,当请求状态变更时,若设置函数,异步线程产生状态变更事件放到...所以当第一次方法执行过后4ms,第二次方法也被执行了。从setInterval()第二次被触发开始,后面几次执行都没有被阻塞,所以间隔时间都在11ms左右。

1.1K40

js中settimeout()用法详解_低噪放工作原理

setTimeout可以保证函数在指定时间间隔不会执行,而setInterval无法保证(有可能出现接近连续执行情况,后面会分析原因)。...但setInterval有一个原则:在向队列中添加回函数时,如果队列中存在之前由其添加函数,就放弃本次添加(不会影响之后计时)。...那么函数执行过程就会变成下图所示: 从图中可以看到,从上次函数执行完毕,到下次开始执行,之间只间隔了10毫秒,而不是我们所希望每隔100毫秒执行一次(因为setInterval只关注任务添加...保证在指定时间内不会执行特点,我们可以在执行完上次函数后,重置定时器,实现循环执行func效果,并且从上次执行完毕到下次执行开始,至少会经过100毫秒。...总结 setTimeout与setInterval都是通过一个定时器控制函数执行,但由于javascript单线程特点,两者都不能准确控制函数执行时间点,这点还请开发者注意。

1.7K20

浏览器原理学习笔记04—浏览器中页面事件循环系统

事件循环应用:WebAPI 2.1 setTimeout 2.1.1 实现方式 消息队列中任务是按顺序执行,为了保证 setTimeout 函数能在指定时间内执行,不能将定时器函数直接添加到消息队列中...嵌套调用最短时间间隔 4 毫秒 在定时器函数里面嵌套调用定时器,也会延长定时器执行时间,系统会设置最短时间间隔为 4 毫秒。...执行环境,添加微任务并在 JavaScript 执行结束时取出执行,可以得到结论: 每个宏任务关联一个微任务队列 微任务执行时长会影响当前宏任务时长 在一个宏任务中分别创建一个用于宏任务和微任务...4.2.1 Promise 解决嵌套 Promise 主要通过以下两步解决嵌套问题: Promise 实现了函数延时绑定 产生嵌套主要原因是在发起任务请求时会带上回函数,所以当前任务结束后下个任务只能在函数中处理...rAF 函数调任务会在 每一帧开始执行,与浏览器刷新频率同步;而 setTimeout 即使设置16.7ms延迟,也可能会因为当前任务执行时间过长而延迟。

1.5K168

JavaScript中定时器工作原理(How JavaScript Timers Work)

在浏览器中,因为所有的 JavaScript 代码都运行在单一线程之中,异步事件(鼠标点击,定时器)只有在他们被触发时候他们才有机会得以执行。 我们可以用下图说明: ?... interval 函数间隔执行,直到该执行队列清空。...,尽管这意味着两个 interval 函数执行时间间隔被牺牲。...这里第一个 interval 执行结束后,紧跟着第三个 interval 马上得到执行,中间没有印象中应该有的 10ms 间隔。...需要注意到, setTimeout 函数执行总是保证了至少 10ms 间隔(与上一个执行相比,实际执行时,这个间隔可能变长,但是不可能更少),但是 setInterval 会尝试每隔 10ms

1.4K10

这一次,彻底弄懂 JavaScript 执行机制

当指定事情完成时,Event Table会将这个函数移入Event Queue。 主线程任务执行完毕为空,会去Event Queue读取对应函数,进入主线程执行。...执行console.log('代码执行结束')。 ajax事件完成,函数success进入Event Queue。 主线程从Event Queue读取回函数success并执行。...一旦setInterval函数fn执行时间超过了延迟时间ms,那么就完全看不出来有时间间隔了。这句话请读者仔细品味。...ok,第一轮事件循环结束了,我们开始第二轮循环,当然要从宏任务Event Queue开始。我们发现了宏任务Event Queue中setTimeout对应函数,立即执行。 结束。...(3)javascript执行运行 执行运行有很大区别,javascript在不同环境下,比如node,浏览器,Ringo等等,执行方式是不同

1.2K20

这一次,彻底弄懂 JavaScript 执行机制

执行console.log('代码执行结束')。 ajax事件完成,函数success进入Event Queue。 主线程从Event Queue读取回函数success并执行。...一旦setInterval函数fn执行时间超过了延迟时间ms,那么就完全看不出来有时间间隔了。这句话请读者仔细品味。...先遇到setTimeout,那么将其函数注册后分发到宏任务Event Queue。...ok,第一轮事件循环结束了,我们开始第二轮循环,当然要从宏任务Event Queue开始。我们发现了宏任务Event Queue中setTimeout对应函数,立即执行。 结束。...(3)javascript执行运行 执行运行有很大区别,javascript在不同环境下,比如node,浏览器,Ringo等等,执行方式是不同

44230

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

Throttle:第一个人说了算 throttle 中心思想在于:在某段时间内,不管你触发了多少次回,我都只认第一次,并在计时结束时给予响应。...它是“司机”决定发车依据;最后“发车”这个动作,就对应到函数执行。...直到“一段时间”到了,第一次触发 scroll 事件对应才会执行,而“一段时间内”触发后续 scroll 都会被节流阀无视掉。...我们对比 throttle 来理解 debounce:在throttle逻辑里,“第一个人说了算”,它只为第一个乘客计时,时间到了就执行。...这个 throttle 与 debounce “合体”思路,已经被很多成熟前端库应用到了它们加强版 throttle 函数实现中: // fn是我们需要包装事件, delay是时间间隔阈值

2K20

从进程,线程去了解浏览器内部流程原理

中低于4ms时间间隔算为4ms iiiii: 异步http请求线程:浏览器有一个单独线程用于处理AJAX请求,即用于异步http请求,当请求完成时,若有函数,通知事件触发线程。...详细描述下:在XMLHttpRequest连接后是通过浏览器新开一个线程请求,在检测到状态变更时,如果设置有函数,异步线程就产生状态变更事件,将这个再放入事件队列中再由JavaScript引擎执行...一旦执行栈中所有同步任务执行完毕(也就是JS引擎线程空闲了),系统就会读取任务队列,将可运行异步任务(任务队列中事件,只要任务队列中有事件,就说明可以执行)添加到执行栈中,开始执行。...setTimeout/setInterval和XHR/fetch代码,这些代码执行时,本身是同步任务,而其中函数才是异步任务。...当代码执行到setTimeout/setInterval时,实际上是JS引擎线程通知定时触发线程,间隔一个时间后,会触发一个事件,而定时触发器线程在接收到这个消息后,会在等待时间后,将回事件放入到由事件触发线程所管理事件队列中

59420

Kotlin Vocabulary | 揭秘协程中 suspend 修饰符

作为开发者,您可以把挂起函数看作是普通函数,只不过它可能会在某些时刻挂起和恢复而已。 不同于,协程提供了一种简单方式来实现线程间切换以及对异常处理。...Continuation 其实只是一个具有泛型参数和一些额外信息接口,稍后我们会看到,它会实例化挂起函数所生成状态机。...它会用于恢复那些执行了参数代码块后挂起协程; 您可以在一个挂起函数上使用 startCoroutine 扩展函数,它会接收一个 Continuation 对象作为参数,并会在新协程结束时调用它,无论其运行结果是成功还是异常...下面我们来看看编译器生成了什么: when 语句参数是 LoginUserStateMachine 实例 label; 每一次处理新状态时,为了防止函数被挂起时运行失败,都会进行一次检查; 在调用下一个挂起函数...而即将被调用挂起函数也同样被编译器转换成一个相似的状态机,并且接收一个 continuation 对象作为参数。当被调用挂起函数状态机运行结束时,它将恢复当前状态机执行

2.2K10

《现代Javascript高级教程》JavaScript异步编程与Promise

两者区别在于,宏任务在下一轮事件循环开始执行,微任务在本轮事件循环结束时执行。这意味着微任务优先级高于宏任务。...requestAnimationFrame 执行时机是在下一次重绘之前,而不是立即执行。 requestAnimationFrame 优点是由系统来决定函数执行时机。...如果系统忙到一定程度,可能会两次“刷新”之间多次执行函数,这时就可以省略掉一些函数执行。这种机制可以有效节省 CPU 开销,提高系统性能。...地狱问题:地狱指的是多层嵌套函数,导致代码难以维护和理解。Promise 可以通过链式调用方式,解决地狱问题。...以上是关于 JavaScript 中异步编程、事件循环、任务队列、宏任务、微任务,以及requestAnimationFrame在事件循环位置,Promise 发展和如何解决地狱详细介绍。

21020
领券