简介:
JavaScript作为Web前端开发的核心语言,其面试题目覆盖了从基础语法到复杂的异步编程、内存管理等多个层面。本文精心整理了JavaScript高频面试题,涵盖闭包、事件循环、Promise、模块化、原型链、this 关键字等关键知识点。通过对每个问题的详细讲解与代码示例,本篇文章将为你提供一套全面的备考指南,助力你在面试中脱颖而出。
🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥
温馨提示:标题⭐越多,说明遇到的概率越大哦!

说说JS原型和原型链⭐⭐⭐
原型:函数都要prototype(显示原型)属性,而prototype会自动初始化一个空对象,这个对象就是原型对象,
原型对象中会有一个constructor属性,这个属性将指向了函数本身,
实例化对象都有一个_proto_(隐式原型)属性,_proto_属性指向原型对象
原型链:从实例对象往上找构造这个实例的相关对象,然后这个关联的对象再往上找,找到创造它的上一级的原型对象,以此类推,一直到object.prototype原型对象终止,原型链结束.
原型链中的原型对象中的内容,是会被不同的实例,所共有的
什么是闭包?闭包有什么作用?⭐⭐⭐
简单来说:函数跨作用于寻找变量就会形成闭包。
由于在js中,变量到的作用域属于函数作用域,在函数执行后作用域会被清除、内存也会随之被回收,但是由于闭包是建立在一个函数内部的子函数,由于其可访问上级作用域的原因,即使上级函数执行完,作用域也不会随之销毁,这时的子函数---也就是闭包,便拥有了访问上级作用域中的变量权限,即使上级函数执行完后,作用域内的值也不会被销毁。
闭包解决了什么:
在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
由于闭包可以缓存上级作用域,那么就使得函数外部打破了“函数作用域”的束缚,可以访问函数内部的变量。以平时使用的Ajax成功回调为例,这里其实就是个闭包,由于上述的特性,回调就拥有了整个上级作用域的访问和操作能力,提高了几大的便利。开发者不用去写钩子函数来操作审计函数作用域内部的变量了。
闭包有哪些应用场景:
闭包随处可见,一个Ajax请求的成功回调,一个事件绑定的回调函数,一个setTimeout的延时回调,或者一个函数内部返回另一个匿名函数,这些都是闭包。简而言之,无论使用何种方式对函数类型的值进行传递,当函数在别处被调用时都有闭包的身影
闭包的缺陷:
由于闭包打破了函数作用域的束缚,导致里面的数据无法清除销毁,当数据过大时会导致数据溢出
new操作符在创建实例的时候经历了哪几个阶段⭐⭐⭐
new创建了一个对象,共经历了4个阶段:
- 创建一个空对象
- 设置原型链
- 让实例化对象中的this指向对象,并执行函数体
- 判断实例化对象的返回值类型
call和apply的区别和作用?⭐⭐⭐
apply和call都是调用一个对象的一个方法,用另一个对象替换当前对象。
相同点:方法的含义是一样的,即方法功能是一样的。并且第一个参数的作用是一样的
不同点:call可以传入多个参数、apply只能传入两个参数,所以其第二个参数往往是作为数组形式传入
存在意义:实现(多重)继承
什么是防抖和节流?如何实现?⭐⭐⭐
防抖:多次触发某事件时,只执行最后一次。例如,搜索框输入时延迟发送请求。
节流:多次触发某事件时,限定在一定时间内只执行一次。例如,窗口滚动时控制滚动事件的触发频率。
// 防抖
function debounce(fn, delay) {
let timer;
return function(...args) {
clearTimeout(timer);
timer = setTimeout(() => fn.apply(this, args), delay);
};
}
// 节流
function throttle(fn, delay) {
let last = 0;
return function(...args) {
let now = Date.now();
if (now - last > delay) {
last = now;
fn.apply(this, args);
}
};
}

最低0.47元/天 解锁文章
1270

被折叠的 条评论
为什么被折叠?



