
JavaScript面试题
文章平均质量分 66
Henry_楠
这个作者很懒,什么都没留下…
展开
-
async原理实现
前言如果不了解使用的可参考 async 函数,这里不再赘述。想要看原理的童鞋,需要了解下 Generator函数原理async实现就是将 Generator 函数和自动执行器,包装在一个函数里。async function fn(args) { // ...}function fn(args) { return spawn(function* () { // ... })}所有的 async 函数都可以写成上面的第二种形式,其中 spawn 函数就原创 2022-05-31 17:57:13 · 407 阅读 · 0 评论 -
bind原理及模拟实现
前言如果不了解bind的使用的请前往 Function.prototype.bind,这里不在赘述。想要看bind原理的童鞋,需要对以下知识有了解:闭包原型链this的指向Array.prototype.slicenew的过程Object.create思路bind方法不会立即执行函数,而且需要保存一个入参,所以这里利用到了 闭包改变函数的作用域,因此要利用 apply 或者 call方法来实现获取函数的所有入参arguments,以及使用 slice 转化出一个数组先利用上原创 2022-05-25 20:47:59 · 978 阅读 · 0 评论 -
关于算法复杂度的理解
前言一般我们谈到算法题,都会涉及到复杂度,如时间复杂度、空间复杂度。下面,我们具体讲讲复杂度是怎么表示的分析要解释复杂度的概念,我们拿最常见的冒泡排序来讲解一下:假如有一组数组 [4,3,2,1]冒泡排序的思路是两两比较大小,看是否需要换位置,因此上面的数组需要进行如下对比:(4,3),(4,2),(4,1),(3,2),(3,1),(2,1),看出来了吗,其实就是我们学数学时的排列组合,上面这个就是C3(2),结果是: 3*(3-1)/2=6所以冒泡排序的复杂度为:n*(n-1)/2当然原创 2022-04-20 12:32:21 · 345 阅读 · 0 评论 -
函数作用域
先来一段代码var a = 1function handle(){ if(true){ var a = 1 let b =2 const c = 3 }}handle()然后我们来看下执行过程中,各个作用域的表现从上面的截图我们可以看到有三种作用域,分别是全局作用域Global(一般指window)函数作用域Local(局部作用域)块状作用域Block全局变量会挂载在window上面局部变量在函数内部创建,一旦函数执行完释放后就会被回原创 2022-03-08 14:25:28 · 147 阅读 · 0 评论 -
深入:微任务与宏任务
先来看看 MDN是怎么描述的: 微任务与Javascript运行时环境宏任务除了我们比较了解的 setTimeout 和 setInterval 之外,还有 requestAnimationFrame这里有一篇文章介绍 被誉为神器的requestAnimationFrame原创 2021-08-20 11:13:40 · 185 阅读 · 0 评论 -
ES5写继承的思路
在js中,继承的方法有以下几种:构造函数继承function Parent() { this.name = 'parent';}function Child(age) { Parent.call(this); this.age = age;}var c = new Child(12);console.log(c.name); //输出parent原理是在Child构造函数中利用call改变了this指向,使得Child对象增加了name属性,值为’parent’,完原创 2021-07-28 11:25:41 · 250 阅读 · 0 评论 -
继承的实现过程及ES5和ES6实现的区别
JS的继承原创 2021-07-27 20:23:40 · 165 阅读 · 0 评论 -
了解一下new的过程发生了什么
事实上原创 2021-07-27 19:31:47 · 340 阅读 · 0 评论 -
防抖(debounce)和节流(throttle)
最近我在面试一些5年的前端,问他们有哪些对闭包的应用,竟然一个都搭不上来,问他们用过防抖节流吗,他们说用过,但不会写真的,作为一个5年的前端,这样真的不行,他们我们从思路上去讲防抖和节流的做法一、防抖(debounce)首先我们介绍一下什么是防抖,防抖就是当多次事件产生时,只需要最后一次真实的触发事件最经典的应该是,模糊匹配搜索,即用户在搜索框里输入,我们会去模糊搜索出用户可能想搜索的内容的列表这个时候为了减少搜索频次,我们就会加入防抖,以便在用户停在输入的一段时间后再触发搜索,减少服务端压力说原创 2021-07-12 16:57:35 · 848 阅读 · 0 评论 -
this的指向以及改变this指向的方法
很多小伙伴会被this的指向问题弄得焦头烂额,或者这次记住了,下次别人一问,又答不上来,那么这次就让我们彻底捋清楚首先,要清楚一点,this的指向在函数声明的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁this永远指向的是最后调用它的对象,这里强调最后window是浏览器中js中的全局对象,globalwindow是nodejs的全局对象,我们创建的变量实际上是给全局对象添加属性非严格模式下,例如user()其实等价于window.user(),所以默认指向是window,原创 2021-07-06 18:19:59 · 353 阅读 · 0 评论 -
__proto__ 和 prototype 以及 constructor
很多小伙伴其实对prototype这个东西都是一知半解的,更别说__proto__,今天就让我们来梳理一下他们的关系,首先我们通过一段代码来看下这几个属性的概念function User(name){ this.name=name}User.prototype.getName = function(){ return this.name}const user = new User('henry')console.log(user.getName()) //打印出 henryconsol.原创 2021-07-06 11:56:38 · 358 阅读 · 0 评论 -
js流程控制——Lazyman的两种实现方式
实现一个LazyMan, 可以按下列方式调用:LazyMan("Hank")输出:Hi! This is Hank!LazyMan("Hank").sleep(10).eat("dinner") 输出:Hi! This is Hank!Wake up after 10Eat dinner~LazyMan("Hank").eat("dinner").eat("supper") 输出:Hi This is Hank!Eat dinner~Eat supper~LazyMan("Han原创 2020-09-08 20:57:51 · 461 阅读 · 0 评论