前端面试题-JavaScript高频题
JavaScript
堆和栈的区别
- 栈内存:基本类型会存放在栈内存中,存取方式为先进后出。
- 堆内存:引用类型会存放在堆内存中
数据类型判断方式
- **typeof **
- instanceof
- Object.prototype.toString.call(obj)
什么是闭包?如何实现闭包
闭包就是在函数外部访问函数内部的变量
在函数内部返回另一个函数,返回的函数中将函数内的变量返回
什么是原型和原型链
- 原型:每个实例对象都有自己的原型,也就是构建自己的原型对象
- 原型链:当查找某个属性的时候会先在对象本身查找,没有再从原型上找
什么是深拷贝和浅拷贝,如何实现?
- 浅拷贝:将对象或数组赋值给新对象时,赋值引用关系,修改新对象原来对象也会跟着变
- 深拷贝:将对象或数组赋值给新对象时,是创建一个新的对象,和之前的没有引用关系,修改新对象原来对象不会变。
事件循环机制(微任务、宏任务)
- JS是单线程的
- 先执行同步代码,然后执行微任务,再渲染dom,最后执行宏任务。
- 微任务:Promise
- 宏任务:setTimeout、setInterval
This指向
- this指向的是调用者
- 没有调用者的时候默认是window对象,有调用者的时候this指向调用者
- 普通函数的this指向的是调用者,没有调用者默是window
- 箭头函数的this指向的是函数作用域的对象
内存(垃圾)回收机制GC
- JavaScript是自动的垃圾回收机制,会根据算法找出不再引用的变量或属性,Js会释放掉。
- 当创建一个对象或数组时会占用内存,不再使用时需要置为null
call, alpay,bind的区别
- 作用相同,都是可以改变this指向
- call和appaly是直接执行该函数,bind方法执行后返回该函数,需要再多加一个()执行。
- 第一个参数都是this的指向对象, 第二个参数call和bind是挨个放进去,apply是数组
ES6
let const、var的区别
- let: 只在作用域内可访问,可以修改
- const:只在作用域内可访问,不可修改
- var:全局作用域,可修改
Promise
- Promise是为了解决链式调用的问题
- 通过new Promise可以创建一个Promise对象, Promise有三种状态,请求中pending,请求成功resoved, 请求失败rejected
- 在Promise中可以执行异步请求,使用resolve返回正常的值,reject返回错误的值, 通过then方法接收返回的值,通过catch方法捕捉错误内容
- Promise.all方法可以同时执行多个异步请求,全部请求成功才会返回成功,其中有一个失败就会返回失败
Class类
- Class是面向对象语法的实现
- 构造函数:通过constructor构造函数进行构建对象的属性
- 继承:通过extends关键字实现继承,通过super执行父类的构造函数并传递初始化参数
async await
- 将异步函数改为同步写法
- 使用async在函数名前声明,在函数内的异步方法前添加await
Es6常用方法
- map、find、filter、reduce、every
- 箭头函数,扩展运算法、模板字符串
- Object.keys、Object.values
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 安耀奇博客!
评论