前端八股文经验分享:面试拷打经历 与 知识总结(纯个人总结)(六) - 持续更新ing

1. sort 的原理

当数组长度小于等于10的时候,采用插入排序;大于10的时候,采用快排

2. 堆、栈、池 的区别

栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new出来的对象)或者常量池中(字符串常量对象存放在常量池中)

堆:存放所有new出来的对象

常量池:存在字符串常量和基本类型常量

3. Object.keys() 和 for ... in 的区别

Object.keys()         返回所有可遍历的键名,它的成员只是参数对象自身的(不含继承的)

for ... in                  是遍历拿到所有的键名(包括原型链上的),结合hasOwnProperty才能拿到对象自身的

4. 用两个队列实现栈

1)构建队列

2)栈中包含两个队列Q1 和 Q2

3)入栈:若Q1 和 Q2 都为空,则随便一个队列进入队列;若某一个不为空,则不为空的那个队列进入队列;不存在两个都不为空的i情况

4)出栈:将不为空的队列从队首将元素复制到另一个队列中,同时进行出栈操作,直到剩下一个元素位置,再进行最后一次出队列操作

5. 用原生JS实现拖拽

实现拖拽分三个阶段:onmousedown 鼠标按下时,onmousemove 移动,onmouseup 抬起

当鼠标按下时,记录当前xy坐标;移动时计算水平垂直移动距离,设置元素left,top值;鼠标抬起时,取消down事件

6. 如何判断数组还是对象

Array.isArray()

Object.prototype.toString.call()

7. prototype 和 _proto_ 的区别

prototype是一个静态属性,_proto_ 是一个实例属性

每个方法Function都有自己的原型属性prototype,指向它的原型对象Function.prototype

每个对象都有_proto_属性,指向自身构造函数的prototype

8.  .call() 是做什么的

可以通过call显式改变this指向,apply,bind 也有类似作用

9. 手写一个call

Function.prototype.myCall = function (obj, ...args) {
    let fn = this
    obj = obj || window
    obj.fn = fn
    args = args || []
    let res = obj.fn(...args)
    delete obj.fn
    return res
}

10. 看代码,说输出

window.num = 1

var obj = {
    'num': 4,
    'dbl': (function () {
        this.num *= 2
        return function () {
            this.num *= 2
        }
    })()
}

var obj1 = obj.dbl

obj1()
obj.dbl()

console.log(window.num + obj.num) // 12

11. 为什么自执行函数的this指向window

因为函数执行时,实际window调用了它,也就是window.函数名(),那么,里面的this指向当前调用函数的对象,就是window

12. promise 和 async await 有什么区别

两者都是实现异步的方案,Pormise是通过 .then 里卖弄的回调实现,async await 代码会更简介些,像同步代码的写法,可以说是改良版的promise

13. async await 怎么处理异常

可以用try catch

14. 如果有很多async await,不想每个都写try catch,有什么

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值