js原理问题整理

136 阅读3分钟

1.原型和原型链:

在js中我们使用构造函数来创建一个对象,在每一个构造函数的内部都有一个prototye属性值,这个属性值是一个对象,这个对象包含了可以由构造函数的所有实例共享的属性和方法。当我们使用构造函数新建一个对象后,在这个对象内部将包含一个指针,这个指针指向构造函数的prototype属性对应的值,在Es5中这个指针被称为对象的原型。

当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么它就会去它的原型对象里找这个属性,这个原型对象又会有自己的原型,于是就这样一直找下去,也就是原型链的概念。

js获取原型的方法: p.proto p.constructor.prototype Object.getPrototypeOf(p)

2.this指向 普通函数 的调用都指向的是window。 对象函数调用:就是那个函数调用,就指向哪里。 箭头函数的调用:在箭头函数里面没有this指向,箭头函数里面的this继承外面的环境。 构造函数中this 指向new出来的那个新的对象。

3.call和apply 两个主要用途 改变this指向,方法借用。

4.设计模式

5.new实现 (1)创建一个空对象,作为要返回的对象实例。 (2)将这个空对象的原型,指向构造函数的prototype属性 (3) 将这个空对象赋值给函数内部的this关键字 (4)开始执行内部的代码。

6.防抖节流 函数防抖 事件被触发n秒后再执行回调,如果在这n秒又被触发,则重新计时,这可以使用在一些点击请求的事件上,避免因为用户多次点击后向后端发送多次请求。 函数节流 指规定一个时间单位,在这个单位时间内,只能有一次触发事件的回调函数执行,如果在同一个单位时间内某事件被触发多次,只有一次能生效。节流可以使用在scroll函数的事件监听上,通过事件节流来降低事件调用的频率。

7.let,var,const区别 var 声明的变量会挂载在window上,而let和const声明的变量不会。var声明变量存在变量提升,let和const不存在变量提升。let和const声明形成块作用域。同一作用域下,let和const不能声明同名变量,而var可以。 9.event loop 指事件循环,指浏览器或node的一种解决javascript单线程运行时不会阻塞的一种机制,也就是我们经常使用的异步原理。 11.promise使用及实现、promise并行执行和顺序执行; promise对象是一个代理对象,被代理的值在promise对象创建时可能未知的,它允许你为异步操作的成功和失败分别绑定相应的处理方法。这让异步方法可以像同步方法那样返回值,但并不是立即返回最终执行结果,而是一个能代表未来出现的结果promise对象。 promise有几种状态,pengding初始状态,fullfilled意味着操作成功完成,rejected意味着操作失败 12.async/await的优缺点 优势在于处理then的调用链,能够更清晰的写出问题,优雅的解决回调地狱问题,缺点就是将异步改成了同步diamante,如果多个异步代码没有依赖性却使用了await会导致性能上的低下。 13.闭包 14.垃圾回收 15.内存泄漏 16.数组方法 17.数组乱序 18.数组扁平化 19.事件委托 事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件 20.事件监听 21.事件模型