本篇文章是前端基础练习题第三十三天的答案及解析部分,纯题目部分请移步前端基础练习题 第33天
正文
1.JS中垃圾回收机制存在的必要性有哪些?
由于字符串、对象和数组没有固定大小,当它们的大小已知时,才能对它们进行动态的存储分配。而像这样动态分配的内存,最终都要释放这些内存以便它们能够被再用。否则,JS解释器将会消耗完系统中可用的内存,造成系统崩溃。
垃圾回收机制主要是进行内存回收,防止内存被占用完。
现在各大浏览器通常采用的垃圾回收方法有两种,即标记清除法和引用计数法。
- 标记清除法,这也是JS中最常用的垃圾回收机制。通常将变量标记为“进入环境”和“离开环境”,对于标记值为“离开环境”的变量,垃圾收集器就销毁其值并释放内存空间。
- 引用计数法,其是跟踪记录每个值被引用的次数。当引用次数为0时,就可将其所占内存空间进行回收。但是当遇到循环引用的时候,却并不会被垃圾回收器回收,而造成内存泄漏。
重点掌握标记清除法即可。
JS引擎执行过程主要分为三个阶段,分别是语法分析、预编译和执行阶段。
- 语法分析阶段:对加载完成的代码块进行语法检验,语法正确则进入预编译阶段,否则停止代码执行,并抛出语法错误(
SyntaxError
) - 预编译阶段:在该阶段中,创建变量对象,分配变量和函数声明的内存空间,确定作用域链以及
this
指向 - 执行阶段:在该阶段,从上至下执行代码,由于js是单线程的,故将通过事件循环机制执行异步代码以避免代码执行阻塞
4.如何解决异步回调地狱问题?
异步回调地狱是指代码横向增长,如在回调之中嵌套多层回调,这会使得代码复杂,逻辑混乱且耦合性强,不利于后期维护。解决方法有:
- 用
Promise
的then
方法,进行链式调用 - 使用
async
…await
- 使用
Generator
协程
Promise
应该是目前最常用的异步方式,其可以使用.then()
进行链式调用。
jQuery
动态生成的元素如何绑定事件?对于动态生成(如append()
添加、ajax
动态加载)的元素,直接绑定事件操作(如click
事件)是不起作用的。此时应使用事件委托机制,将事件绑定在已存在于DOM
中的元素上。通过jQuery
的on()
方法可以实现。on()
方法添加的事件处理程序适用于当前及未来的元素。示例如下所示:
1 | $( |
这段代码可理解为给.select
下的.select-item
(包括现在及未来的)绑定click
事件。
mouseover
与mouseenter
事件有何区别?mouseenter
没有冒泡的过程,而mouseover
在容器区域内会多次触发,有冒泡的过程。
YYYY-MM-DD
格式),判断年龄是否大于18
岁,大于18
岁返回true
,否则返回false
。参考代码如下所示:
1 | function isAudit(age) { |
代码中主要是将输入的时间转换为时间戳,然后计算时间戳差,并把时间戳差转化为年,判断其是否大于18
即可。这只是其中一种实现方式,应该也是较为简便的一种方式。
说明
题目中出现的JS指的是采用ECMAScript 2015及之后标准的JavaScript
答案中,若有错误和需完善的地方,可在下方留言反馈哈~~
查看纯习题版,请点击前端基础练习题 第33天