Day1刷面试题

开始记内容!我行我可以!
在这里插入图片描述

JavaScript中什么是基本数据类型什么是引用数据类型?以及各个数据类型是如何存储的?

基本数据类型:Number、String、Boolean、Undefined、Null、Symbol(ES6新增)
引用数据类型:Object、Array、Date、Function、RegExp
基本数据类型存储在栈中,引用数据类型存放在堆中,引用地址保存在栈中,方便引用,这个引用地址指向的是对应的数据,以便快速查找到堆内存中的对象。
栈内存是自动分配内存的,堆内存是动态分配内存的,所以不会自动释放,所以每次使用完对象后都要设置为null避免不必要的内存消耗。

什么是作用域?什么是作用域链?

规定变量和函数可使用范围的称作作用域。
每个函数都有一个作用域链,在查看函数或者变量的时候,需要从局部作用域到全局作用域依次查找,这些作用域的合集称为作用域链。

什么是闭包?闭包的特性?

定义在一个函数内部中的另一个函数,其中一个内部函数在包含他的外部函数之外被调用时,就会形成闭包。
特性:
函数嵌套函数。
函数内部可以引用函数外部的变量和参数。
参数和变量不会被垃圾回收机制回收。
作用:
可以避免命名冲突。
解决循环绑定引发的索引问题。
变量不会被销毁(不会被垃圾回收机制回收)
应用:
设计模式中的单例模式
for循环中的保留i的操作
防抖和节流
函数柯里化
缺点:
会造成内存泄露

什么是内存泄露?

内存泄露是指不再使用的内存没有被及时释放出来,导致该段内存无法使用。

什么导致内存泄露?

内存泄漏指我们无法通过js访问某个对象,而垃圾回收机制却认为该对象还在被引用,因此垃圾回收机制不会释放该对象,导致该内存块无法被释放,积少成多,系统会越来越卡以至崩溃。

JS中常见的内存泄露?

闭包
意外的全局变量
被遗忘的计时器或者回调函数
脱离DOM的引用

什么是原型?什么是原型链?

原型:原型分为隐式原型和显式原型,每个对象都有一个隐式原型,它指向自己的构造函数的显示原型。
原型链:多个__proto__组成的集合称为原型链。

  • 所有实例的__proto__都指向他们的构造函数prototype
  • 所有的prototype都是对象,自然他的__proto__指向的是Object()prototype
  • 所有的构造函数的隐式原型指向的都是Function()的显示原型
  • Object的隐式原型是null

interface 和 abstract有什么异同点?

相同点:都是起到约束左右
区别:
interface 里面的方法全部都是抽象的,里面的方法全部没有被实现等到子类去实现;abstract里面的方法不全是抽象,至少存在一个抽象方法即可。
interface可以多实现
abstract只能单继承

JS为什么会是单线程?

因为js里面有可视的dom,如果是多线程的话,这个线程正在删除DOM节点,另一个线程正在编辑DOM节点,会导致浏览器不知道该听谁的。

JS性能优化的方式

垃圾回收
闭包中对象的清除
防抖节流
分批加载(serInterval,加载10000个节点)
事件委托
少用with
requestAnimationFrame的使用
script标签中的defer和async
CDN

如何实现异步编程?

回调函数

宏任务和微任务(异步任务)有哪些?是怎样执行的?

宏任务:script、setTimeOut、setInterval、setImmediate
微任务:promise.then、process.nextTick、Object.observe、MutationObserver
promise同步任务

所有同步任务主线程执行
遇到宏任务后进入宏任务,所有宏任务放入宏任务队列,所有微任务放入微任务对列,先执行微任务队列,执行望城后再执行下一个宏任务,再清空下一个微任务队列,依次循环。

变量和函数怎么进行提升的?优先级是怎么样的?

对所有函数声明进行提升(除了函数表达式和箭头函数),引用类型的赋值,开辟堆空间、存储内容、将地址赋给变量。
对变量进行提升,只声明,不赋值,值为undefined

var let const 有什么区别?

var:
var声明的变量可进行变量提升,let和const不会
var可以重复声明
var在非函数作用域中定义是挂在window上的
let:
let声明的变量只在局部起作用
let防止变量污染
不可再声明
const:
具有let的所有特征
不可被改变
如果使用const声明的是对象的话,可以修改对象里面的值

跨域的方式有哪些?

1、JSONP:只能get请求,通过同源设计不到的漏洞,也就是像img中的src,link标签的href,script的src都没有被同源策略限制到。
2、document.domain:只能跨一级域名相同的域(www.qq.com和www.id.qq.com二者都有qq.com)
3、location.hash+iframe:hash传值只能单向传递,所有可以通过一个中间网页,a如果想和b通信,可以通过一个与a同源的c作为中间页面,a传给b,b传给c,c再传给a
4、window.name+iframe
5、postMessage
6、CORS:通过自定义请求头来让服务器和浏览器进行沟通
nginx代理跨域:nginx模拟一个虚拟服务器,因为服务器与服务器之间是不存在跨域。(发送数据时 ,客户端->nginx->服务端 \ \ 返回数据时,服务端->nginx->客户端)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值