前端鄙视题
1.什么是闭包,为什么要使用闭包?
闭包就是能够读取其他函数内部变量的函数;闭包可以读取函数内部的变量,可以让变量的值始终保持在内存中。
2.解析事件委托?
事件委托,也叫事件代理,通俗地来讲,就是把一个元素响应事件(click、keydown......)的函数委托到另一个元素;
举个例子,比如一个宿舍的同学同时快递到了,一种方法就是他们都傻傻地一个个去领取,还有一种方法就是把这件事情委托给宿舍长,让一个人出去拿好所有快递,然后再根据收件人一一分发给每个宿舍同学;
在这里,取快递就是一个事件,每个同学指的是需要响应事件的 DOM 元素,而出去统一领取快递的宿舍长就是代理的元素,所以真正绑定事件的是这个元素,按照收件人分发快递的过程就是在事件执行中,需要判断当前响应的事件应该匹配到被代理元素中的哪一个或者
哪几个。
委托的优点:1. 减少内存消耗 2. 动态绑定事件
3.谈谈this对象的理解?
this表示当前对象,this的指向是根据调用的上下文来决定的,默认指向window对象,指向window对象时可以省略不写;
对象函数调用,哪个对象调用就指向哪个对象;
使用 new 实例化对象,在构造函数中的this指向实例化对象;
使用call或apply改变this的指向。
4.如何解决ajax回调地狱问题?
首先关于回调地狱,就是函数层层嵌套,后面的函数必须等前面函数完成才能执行,代码会变得非常冗杂!
异步编程作为JavaScript中的一部分,具有非常重要的位置,它帮助我们避免同步代码带来的线程阻塞的同时,也为编码与阅读带来了一定的困难。过多的回调嵌套很容易会让我们陷入“回调地狱”中,使代码变成一团乱麻。为了解决“回调地狱”,我们可以使用文中所述的这五种常用方法:
- function拆解
- 事件发布/订阅模式
- Promise
- Generator
- async / await
5.谈谈你对es6的理解?
es6是一个新的标准,它包含了许多新的语言特性和库,是JS最实质性的一次升级。
比如’箭头函数’、’字符串模板’、’generators(生成器)’、’async/await’、’解构赋值’、’class’等等,还有就是引入module模块的概念。