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

那些高级前端是如何回答面试题的_2023-02-24

); };}window.addEventListener( "scroll", throttle(() => { console.log(111); }, 1000));你工作终于到那些问题...,解决方法是什么经常遇到的问题就是Cannot read property ‘prototype’ of undefined解决办法通过浏览器报错提示代码定位问题,解决问题Vue项目中遇到视图更新,方法执行...,埋点触发等问题一般解决方案查看浏览器报错,查看代码运行到那个阶段未之行结束,阅读源码以及相关文档等然后举出来最近开发的项目中遇到的算是两个比较大的问题。...,for...in会返回数组中所有可枚举的属性(包括原型链可枚举的属性),for...of只返回数组的下标对应的属性值;总结:for...in循环主要是为了遍历对象而生,不适用遍历数组; for......渐进式网络应用(PWA)是谷歌2015年底提出的概念。基本上算是web应用程序,但在外观和感觉与原生app类似。支持PWA的网站可以提供脱机工作、推送通知和设备硬件访问等功能。

46630

JavaScript进阶之路系列(一): 高阶函数

回调函数(callback) 这个基本是我们非常常用的高阶函数了,我们可以来看一下回调函数的代码: function greeting(name) { alert('Hello ' + name)...主函数") return z; } f(ff); 对比来看,回调与同步、异步并没有直接的联系,回调只是一种实现方式,既可以有同步回调,也可以有异步回调,还可以有事件处理回调和延迟函数回调,这些我们工作中有很多的使用场景...我一般和别人合作项目的时候,想让人感觉我的代码写的很厉害,有时候会故意写两个回调,但是这种行为不可取的,减少代码冗余,无用的代码只会造成维护的困难。...("console.log('我是回调函数')", 3000);//模仿耗时操作 } //调用主函数,将函数B传进去 A(B); 这里有一个问题,我们执行A函数后,执行B函数,为什么直接在A函数里调用...')", 3000);//模仿耗时操作 } //调用主函数,将函数C传进去 A(B); A(C); 这时候,试一下这段代码,就会出现很大的分歧。

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

面试官:你能回答这两个简单的问题吗

背景 这是我的朋友最近一次面试中被问到的两个问题,来一起学习一下。 1. 如何防止重复发送多个请求? 问题: 我们的工作中,经常需要只发送一次请求,以防止用户重复点击。...两数之和 这是力扣的第 1 题,请看这里:leetcode.cn/problems/tw… 给定一个整数数组 nums 和一个整数目标值 target,请你数组中找出 和为目标值 target  的那... 两个 整数,并返回它们的数组下标。...但是,数组中同一个元素答案里不能重复出现。 你可以按任意顺序返回答案。  ...事实,我们可以用一个 "for" 循环来做,只要把加法变成减法,并且把遍历的值储存在一个对象 sumCache 中。

25530

【Vue原理】NextTick - 白话版

写文章不容易,点个赞呗兄弟 专注 Vue 源码分享,文章分为白话版和 源码版,白话版助于理解工作原理,源码版助于了解内部详情,让我们一起学习吧 研究基于 Vue版本 【2.5.17】 如果你觉得排版难看...中执行,这样就算异步了,等待当时同步代码执行完毕再执行 但是,每设置一个 nextTick 就新建一个 setTimeout 又不实际, 毕竟一个 setTimeout 是异步,两个setTimeout...也是异步,两个都要等 同步代码执行完毕之后才执行 那我直接只设置一个 setTimeout 不就好了 那一个 setTimeout 怎么执行多个回调呢?...每次调用 nextTick,便往数组里面 push 设置的回调 2 只注册一个 setTimeout,时间为0,用于遍历 回调数组,然后逐个执行子项 3 同步代码执行完毕,setTimeout 自然会执行...,比如冒泡(至于为什么,会有一篇文章说明) Vue 2.6 ,又只使用微任务,因为想到了其他办法解决连续事件的问题 Vue 的 宏微任务 并不算是严格意义的宏微任务,是种兼容的写法。

76830

谈谈ES6语法(汇总中篇)

本次的ES6语法的汇总总共分为、中、下三篇,本篇文章为中篇。 好了,我们直奔中篇的内容~ 数组扩展 数组扩展运算符 数组扩展运算符(spread)是三个点(...)。...在前一篇中也提到过,ES6语法声明的变量是不会挂载全局对象的~ Array.from() Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历...,,是第三个,第四个... var timeoutID = scope.setTimeout(function[, delay, param1, param2, ...]); function 是你想要在到期时间...setTimeout(function(){ console.log(i); },1000) } console.log(i); 复制代码 我们直接上使用promise改写的代码吧...codepen 代码验证 本次的ES6语法的汇总总共分为、中、下三篇,本篇文章为中篇。

73620

深度解密setTimeout和setInterval——为setInterval正名!

但是异步的情况下,比如ajax轮循(websocket不在讨论范围内),我们只有一种选择就是setTimeout,原因只有一个——天晓得这次ajax要浪多久才肯回来,这种情况下只有setTimeout...stack和queue 于是出现了stack和queue,stack是JS工作的堆,一直不断地完成工作,然后将task推出stack中。...没错,字符串占不了多少内存,但是如果是一个成千上万的数组呢?那内存占的可就很多了,如果不及时释放,后续工作会很艰难。...这里我们创建一个demo用来测试内存是如何工作的: let array=[]//创建数组 createArray()//push内容,增加内存 function createArray(){...内存泄漏的原因分明是编码习惯不好,setInterval背这个锅。

2.9K30

javascript入门到进阶 - js系列一:三种基本的数据结构

大家进行javascript开发的时候,有没有想过,我们写的代码是怎么样运行的呢?下面我们就来剖析一下代码的执行过程。...大家看看上叙的代码,结合一下前面的的分析,思考一下调用栈是怎么工作的? (1)先运行绑定事件函数,把onClick事件绑定在button标签上。该函数没有没有调用其他函数。...(4)console.log("My Name Is Chirs")不会等待5s之后,再执行,因为settimeout并不会在调用栈中执行5秒,实际它在调用栈中是立即执行完的。...再过几秒之后,间隔为5s的settimeout把回调函数压入队列,这时候调用栈中没有代码执行,所以会执行这个代码,输出"Click the button“。结束代码运行。...在上述的代码中已经给出了答案,出队时不进行数据搬移,虽然会导致数组连续,入队时当没有空闲当空间时也就是tail == n 入队时进行数据搬移,这样也就保持了数组的连续性,同时也解决了频繁的入队、出队操作

64620

Web Worker 的内部构造以及 5 种你应当使用它的场景

一些因大量计算引起的 UI 阻塞问题中,使用 setTimeout 来解决阻塞的效果还不错。...拯救你于水火之中的 Web Worker HTML5 已经提供了不少开箱即用的好东西,包括: SSE ( 一篇文章 中已经谈过它的特性并与 WebSocket 进行了对比) 地理信息 应用缓存 LocalStorage...事实,二者互不阻塞的原因就是它们是并行执行的,可以看出 Web Worker 是货真价实的多线程。 你可能想说 — ”JavaScript 不是一个单线程执行的语言吗?“。...一旦下载完成,代码将立刻执行,此时 Worker 也就开始了它的工作。如果提供的代码文件不存在返回 404,那么 Worker 会静默失败并不抛出异常。...为保证存取时阻塞 UI 线程,这部分工作理应交给 Web Worker 完成。好吧, IndexDB 中你可以不使用 Web Worker,因为它提供的异步 API 同样不会阻塞 UI。

3.5K10

前端js手写题经常忘,记录一下

,那么其实也可以用reduce 来实现数组的拼接,从而简化第一种方法的代码,改造后的代码如下所示:let arr = [1, [2, [3, 4]]];function flatten(arr) {...,由于数组会默认带一个 toString 的方法,所以可以把数组直接转换成逗号分隔的字符串,然后再用 split 方法把字符串重新转换为数组,如下面的代码所示:let arr = [1, [2, [3,...flat 方法的语法:arr.flat([depth])其中 depth 是 flat 的参数,depth 是可以传递数组的展开深度(默认填、数值是 1),即展开一层数组。...,主线程中还有任务执行,所以等待,some event 执行结束后执行 T1定时器代码;又过了 100ms,T2 定时器被添加到队列中,主线程还在执行 T1 代码,所以等待;又过了 100ms,理论又要往队列里推一个定时器代码...有两个缺点使用setInterval时,某些间隔会被跳过可能多个定时器会连续执行可以这么理解 :每个setTimeout产生的任务会直接push到任务队列中;而setInterval每次把任务push

92240

盘点那些 JS 手写题

当使用 bind setTimeout 中创建一个函数(作为回调提供)时,作为 thisArg 传递的任何原始值都将转换为 object。...在这个对象「使用 open 方法创建一个 HTTP 请求」,open 方法所需要的参数是请求的方法、请求的地址、是否异步和用户的认证信息。 发起请求前,可以为这个对象「添加一些信息和监听函数」。...使用 setTimeout 实现 setInterval 平常开发中,我们很少用到setInterval。...因为事件循环中,setInterval的延迟可能会积累,所以setTimeout比setInterval要准确。...手写一个 sleep / delay 函数 sleep 函数既是面试中常问到的一道代码题,也是日常工作,特别是测试中常用的一个工具函数。

1.3K30

JavaScript同步、异步及事件循环

console.log(1); console.log(2); console.log(3); 以下代码会输出2、3、1,像这种按顺序执行的,或者说代码执行中间有时间间隙的,叫异步。...也就是说执行代码时,渲染会挂起;渲染DOM时,代码也不会执行。...虽然JS是单线程,但是浏览器是多线程的,遇到像setTimeout、DOM事件、ajax等这种任务时,会转交给浏览器的其他工作线程(上面提到的几个线程)执行,执行完之后将回调函数放入到任务队列。...// eventLoop是一个用作队列的数组 // (先进,先出) var eventLoop = [ ]; var event; // “永远”执行 while (true) { // 一次tick...执行完同步任务之后,开始执行微任务,也就是console.log(2), 输出2 执行完微任务之后,会执行宏任务,第一个宏任务也就是第一个setTimeout 第一个setTimeout会先输出3,

1.1K30

每天10个前端小知识 【Day 3】

解释下如下代码的意图:Array.prototype.slice.apply(arguments) arguments 为类数组对象,并不是真正的数组。 slice 可以实现数组的浅拷贝。...由于 arguments 不是真正的数组,所以没有 slice 方法,通过 apply 可以调用数组对象的 slice 方法,从而将 arguments 类数组转换为数组。 3....clientWidth/clientHeight 返回的是元素的内部宽度,它的值只包含 content + padding,如果有滚动条,包含滚动条。 clientTop 返回的是上边框的宽度。...Polyfill 指的是用于实现浏览器并不支持的原生 API 的代码。...捕获阶段:从window对象传导到目标节点(上层传到底层)称为“捕获阶段”(capture phase),捕获阶段不会响应任何事件; 目标阶段:目标节点触发,称为“目标阶段” 冒泡阶段:从目标节点传导回

11610

React 进阶 - State

比如用 promise 或者 setTimeout handleClick 中这么写: setTimeout(()=>{ this.setState({ number:this.state.number...}) console.log(this.state.number) }) }) 输出: 0 0 0 callback1 1 callback2 1 callback3 1 实际工作中...0 函数组件更新就是函数的执行,函数一次执行过程中,函数内部所有变量重新声明,所以改变的 state ,只有在下一次函数组件执行时才会被更新。...useState 注意事项 使用 useState 的 dispatchAction 更新 state 的时候,记得不要传入相同的 state,这样会使视图更新。...,只能通过 useEffect 来执行 state 变化引起的副作用 setState 底层处理逻辑主要是和老 state 进行合并处理,而 useState 更倾向于重新赋值

88720

京东前端高频面试题合集

说一下类组件和函数组件的区别?1. 语法的区别:函数式组件是一个纯函数,它是需要接受props参数并且返回一个React元素就可以了。...1)数组的解构 解构数组时,以元素的位置为匹配条件来提取想要的数据的:const [a, b, c] = [1, 2, 3]最终,a、b、c分别被赋予了数组第0、1、2个索引位的值: 数组里的0、1...、2索引位的元素值,精准地被映射到了左侧的第0、1、2个变量里去,这就是数组解构的工作模式。...(2)PostCss:PostCss 是如何工作的?我们什么场景下会使用 PostCss? 它和预处理器的不同就在于,预处理器处理的是 类CSS,而 PostCss 处理的就是 CSS 本身。...PostCss 在业务中的使用场景非常多:提高 CSS 代码的可读性:PostCss 其实可以做类似预处理器能做的工作;当我们的 CSS 代码需要适配低版本浏览器时,PostCss 的 Autoprefixer

47420

2024年2月前端资讯动态:JSR新仓库革新及Set方法等全新特性

这意味着,无论是Deno、Node.js等不同的运行时环境下,JSR都能提供特定于目标运行时的版本,极大地简化了开发者的工作。...这些操作不仅减少了开发者需要手动实现这些功能的工作量,也使得代码更加简洁明了。...实际,Tempo还提供了更多高级功能,如时间运算、时区敏感的比较等,可以满足不同场景下对日期和时间处理的需求。...应用HMR的考虑因素 尽管HMR带来了显著的开发体验改进,但它的实现和使用也需要考虑一些因素: 模块接受自身更新:为了使HMR工作,模块需要编写代码来接受自己的更新。...Vite中,这通常意味着需要在模块中添加特定的HMR API调用。 状态管理:某些情况下,模块的状态(如Vuex或Redux中的状态)需要特别处理,以确保模块替换时状态丢失。

16410

中高级前端高频面试题分享

(arguments.callee,intervalTime); }} 代码比较简单,我们只是setTimeout的方法里面又调用了一次setTimeout,就可以达到间歇调用的目的。...那么除了使用for循环,如何更简单的正确的遍历数组达到我们的期望呢(即遍历method和name),ES6中的for of更胜一筹....之前,javascript是没有块级作用域的,我们都是通过()来模拟块级作用域。 (function(){ //这里是块级作用域 })(); 但是ES6中,{}就可以直接代码块级作用域。...() { document.write( "2" ); }} foo(); // 2 我们所认识的javascript里,这段代码的输出结果为2。...如果你基础扎实的话,可以看看这篇文章:深入理解javascript之IIFE 但是ES6里,这段代码或抛出ReferenceErroe错误。

80010

JavaScript定时器:setTimeout与setInterval 定时器与异步循环数组

与setInterval唯一不同的是,setTimeout指定的延迟时间到达后 向ui队列添加一个任务,函数会立即执行,setInterval则是指定的延迟时间不断的向ui队列添加执行任务,如果你没有手动清除那么...给用户的表现就是 浏览器工作时短暂或长时间失去反应,用户的操作不能及时得到响应。...body插入字符串 持续运行了五千次,谷歌浏览器中这段代码会执行3秒左右 而这段时间页面始终是空白且不可操作的,这是一个非常常见的性能问题,处理大量运算的时候,我们可以利用延迟执行将代码分成几段分别运行...,可以有效改善代码执行速度,并且因为它是异步的 执行中的空隙,ui会启动更新,因此并不会导致页面空白,用户体验提高; setTimeout(function(){ for(var i=0...if(time==undefined){time=30;}; var fattr = name.concat();//克隆数组 setTimeout

2.1K60
领券