请选择 进入手机版 | 继续访问电脑版

热乎乎的美团前端面经(2020.12.28)

[复制链接]
暖男先生 发表于 2020-12-31 18:14:48 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

  • js 中 this指向问题:
  1. var a = 1;var b = {    c: function () {        console.log(this.a);    },    d: () => {        console.log(this.a);    }};b.d.bind({    a: 2});var fun = b.c;fun();b.c();b.d();
复制代码
第一个func应该是隐式范例绑定,this指向window,
window.func() =>1
第三个箭头函数本身不含有this,绑定的是界说时候的上下文,=> 1;
第二个显式绑定,this指向b,b没有a属性打印undefined
2. 事件轮询机制:
  1. console.log(1)setTimeout(() => {  console.log(2)  Promise.resolve().then(() => {    console.log(3)  })})new Promise((resolve) => {  console.log(4)  setTimeout(() => {    console.log(5)    resolve();  }, 2);}).then(res => {  console.log(res)});
复制代码
// 1 4 2 3 5 undefined
3. 手写promsie.all
  1. function all(promises){    const values = [];    return new Promise((resolve, reject)=> {        promises.forEach((promise, index)=> {        promise.then((value)=>{            //values.push(value);            values[index] = value;            if(values.length == promises.length){                resolve(values);            }        }, reason => {            reject(reason);        })    })     })}
复制代码

  • // 环形链表判断:
    说了快慢指针
    // 对象是否有循环引用
    // 没搞清楚这个题目:
  1. //line=readline()//print(line)//.log('Hello World!');var a = {    b: {        c: {            d: a        }    }}function refCycle(obj){    for(let key in obj){        if(obj[key] == obj){            return true;        } else {            refCycle(obj[key]);        }    }}console.log(refCycle(a))
复制代码
  1. function fn(object) {    // 首先判断 object 是否存在于 map.keys 中    if (Array.from(map.keys()).includes(object)) {        // 如果存在则取出值并返回        return map.get(object);    }        var cloneObj = {};    // 设置 object 为 key,cloneObj 为值    map.set(object, cloneObj);        for (var key in object) {        // 赋予新对象相应的 property        // 通过递归调用来拷贝 property 的值        cloneObj[key] = fn(object[key]);    }        // 返回新对象    return cloneObj; }  var obj = {};obj.a = obj; var map = new Map(); fn(obj);
复制代码
博客地点: https://blog.csdn.net/weixin_33738982/article/details/91414115?ops_request_misc=%25257B%252522request%25255Fid%252522%25253A%252522160920791616780271113414%252522%25252C%252522scm%252522%25253A%25252220140713.130102334…%252522%25257D&request_id=160920791616780271113414&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-91414115.nonecase&utm_term=%E5%AF%B9%E8%B1%A1%E5%BE%AA%E7%8E%AF%E5%BC%95%E7%94%A8

  • 手写一个flat函数
    刚开始写了一个版本:
  1. Array.prototype.flat1 = function (arr, n){    let newArr = new Array();    for(let i = 0; i < arr.length; i++)(        if(typeof(arr[i]) !== "object" && n-- > 0){            newArr = newArr.concat(this.flat1(arr[i]));        } else {            newArr.push(arr[i]);        }    )    return newArr;}var flat = function(arr, depth){   let res = [],       depthArg = depth || 1,       depthNum = 1,       flatMap = (arr) => {          arr.map((element, index, array) => {             if(Object.prototype.toString(element).slice(8,-1) === "Array") {              if(depthNum < depthArg) {                 depthNum++;                 flatMap(element);              } else {                 res.push(element);                 if(index === array.length - 1) depthNum = 0;              }             }          })       };     flatMap(arr);     return res;};let arr = [[1], [[2]], [3]];console.log(flat(arr)); // [1,[2], [3]]
复制代码

  • hash模式和history模式的实现原理
    监听hash的改变:
  1.             Document            [url=https://www.jianchenwangluo.com/#/home]首页[/url]        [url=https://www.jianchenwangluo.com/#/about]关于[/url]   
  2.    
  3.    
复制代码
  1.             Document    div id="app">        [url=http://www.jianchenwangluo.com/home]首页[/url]        [url=http://www.jianchenwangluo.com/about]关于[/url]        
  2.    
复制代码

  • 实现数组的slice方法:
  1. Array.prototype.slice = function(start, end){   let len = this.length;   let l = start === undefined ? 0 : start < 0 ? Math.max(start + len, 0) : Math.min(start, len);   let r = end === undefined ? len : end < 0 ? Math.max(end + len, 0) : Math.min(end, len);   const res = [];   while(l < r) {      res.push(this[l++]);   }   return res;}
复制代码

  • 判断数据范例3种方法,实现instaneOf
  1. const instance_of = (left, rigth) => {   const baseType = [&#39;number&#39;, &#39;string&#39;, &#39;boolean&#39;, &#39;undefined&#39;, &#39;symbol&#39;];   const RP = right.prototype;   while(true){      if(left == null) {         return false;      } else if (left == RP) {         return true;      }      left = left.__proto__;   }}
复制代码
来源:https://blog.csdn.net/sinat_36048532/article/details/111880967
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )