前端面试题
什么是匿名函数?
匿名函数就是没有真正名字的函数,可以用一个立即执行的匿名函数创建一个块级作用域,匿名函数执行完毕后,存储在内存中的相应变量会被销毁,从而节省内存。并且在大型多人开发的项目中,块级作用域可以减少变量命名冲突。匿名函数还可以实现闭包,如下:
function fn(num){
let Arr = [];
for(let i=0;i<num;++i) {
Arr.push(function() {
console.log(`我是第${i}`);
});
}
return Arr;
}
let aa = fn(5);
什么是闭包
闭包指可以访问到外部函数内部变量的函数,正常函数执行完毕后,里面声明的变量被垃圾回收处理掉,但是闭包可以让作用域里(外部函数)的变量和参数,在函数执行完后,内存不会被释放。闭包可以当做返回值被函数返回,也可以当做参数传入函数中,应该尽量避免使用闭包,会增大内存使用量,使用不当很容易造成内存泄露。
Event Loop
Event Loop是一种运行机制,js采用这种机制来解决单线程运行带来的一些问题。js是单线程,主要用途是与用户的交互以及操作DOM。js中所有任务分为同步和异步两种,同步任务在主线程上排队执行,只有前一个任务执行完才会执行下一个,异步任务不进入主线程、而进入"任务队列"(task queue),只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。