首页 > 其他分享 >2022年面试题之JS

2022年面试题之JS

时间:2023-01-19 15:55:48浏览次数:66  
标签:闭包 面试题 函数 Car JS let 2022 数组 变量

1. js 数组的哪些方法会改变原数组

pop() 删除 arrayObject 的最后一个元素,把数组长度减 1,并且返回它删除的元素的值
push() 方法可把它的参数顺序添加到 arrayObject 的尾部
reverse() 将数组中元素颠倒过来,该方法会改变原来的数组,而不会创建新的数组。
shift() 数组的第一个元素从其中删除,并返回第一个元素的值,
sort() 在原数组上进行排序
splice() 方法可删除从 index 处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。
unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度

具体参考:https://blog.csdn.net/m0_62239766/article/details/124748963

2. new 关键字的底层逻辑

// 构造一辆汽车, 入参是车的品牌
function Car (logo) {
    this.logo = logo || 'unknown name'
}
// 汽车的基本功能放置在原型链上
Car.prototype={ 
    start(){},
    run(){},
    stop(){}
}
//创建汽车
let myCar = new Car('myCar')

执行new操作是发生了啥事:
① 创建一个新的对象 let myCar = {}
② 为新的对象指定_proto_属性 myCar._proto_= Car.prototype
③ 利用apply/call 对新对象执行构造方法 Car.apply( myCar, arguments)

3. 作用域与变量提升

作用域:对某个范围产生作用,外部不能访问内部变量,但内部可以访问外部变量
变量提升:变量的声明被自动移动到了函数或全局代码的最顶上

4. JavaScript的设计模式

单例模式:它只实例化一次(保证一个类仅有一个实例,并提供一个访问它的全局访问点。)
策略模式:策略模式是指有一定行动内容的相对稳定的策略名称。策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。
代理模式:为一个对象提供一个代用品或占位符,以便控制对它的访问。
发布订阅模式:也称作观察者模式,定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知
工厂模式:将创建对象的过程单独封装。

5. 函数 防抖和 节流

防抖在短时间内多次触发同一个函数,只执行最后一次。举例:搭乘公交车的时候,陆续有不同的乘客上车,但师傅只会在最后一个乘客上车后才关门。

function debounce(fn, wait = 1000) {
    let timer = null;
    let _this = this;
    return function debounced() {
        // 重置计时器
        if (timer) clearTimeout(timer);
        // 新计时器
        timer = setTimeout(() => {
            fn.call(_this, arguments)
        }, wait);
    };
}        

节流:多次触发同一个函数,同一段时间内只执行一次。举例:获取验证码很多都会限制 60s 的时间,在 60s 内再次获取验证码是无效,只能获取一次。下个60s才能再次获取。

function throttled(fn, wait = 1000) {
   let previous = 0;
   let _this = this;
   return function(){
      const now = new Date();
      if (now - previous > wait) {
         fn.apply(_this, args);
         previous = now;
      }
   };
}

 6. 服务端渲染 ssr 

简述:
    又称为后端渲染,服务器端在返回html之前,在html特定的区域特定的符号里用数据填充,再给客户端,客户端只负责解析HTML。
    鼠标右击点击查看源码时,页面代码可以在源代码中看到。
    性能消耗在服务器端,用户达到一定程度的时候,后端会考虑缓存
    部分数据,避免消耗过多的资源重复渲染。
优点:
    前端耗时少,首次渲染快,更快的内容到达时间
    利于SEO
缺点:
    网络传输数据量大,占用部分服务器运算资源
    用户体验差
    不容易维护,前端修改部分html/css后端也要改

场景:

    注重SEO的新闻网站,非强交互的页面,建议采用服务器端渲染

具体实例参考:https://www.likecs.com/show-182937.html

7. 什么是闭包?闭包的使用场景有哪些?闭包的缺点是什么?

闭包实际上就是一个函数中嵌套了另一个函数,内部函数可以访问外部函数的变量。

使用场景: setTimeout,封装私有变量,防抖节流

缺点:闭包会使函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,可能会导致内存泄露。解决方法是在退出函数之前,将不使用的变量全部删除。

 

标签:闭包,面试题,函数,Car,JS,let,2022,数组,变量
From: https://www.cnblogs.com/xuqichun/p/16517813.html

相关文章

  • html css js 手写简易轮播图
    源码下载:https://github.com/pine007/source-codes/blob/main/html-css-js-手写简易轮播图.zip1、效果2、编码<!DOCTYPEhtml><html><head><metacharset="UTF-......
  • VK Cup 2022 F. Bracket Insertion
    有一个初始为空的括号序列,依次执行\(n(n\le500)\)次操作,每次有\(p\)的概率选取(),\(1-p\)的概率选取)(,随机插入首部、尾部、中间的空隙(也就是从\(2i-1\)个位置中......
  • python提取json中键值
    0X00 样例数据:{'d':{'__type':'st','YX':"<tableid='tabyxlist'><tr><tdclass='tdth'>院校名称</td><tdclass='tdth'>计划数</td></tr><trid=......
  • redis面试题
    1.项目中是否使用过redis?为什么要使用redis?使用过之前使用的都是修改某个value值,如登录账号被锁定30分钟,查看还剩余的时间,或者想将账号由锁定状态更新为未锁定状态,删......
  • 华为面试题之购物单解答
    原题如下:题目描述王强今天很开心,公司发给N元的年终奖。王强决定把年终奖用于购物,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子: ......
  • 2022年终总结
    曾经的日子一去不复返了。我希望我的未来可以不用再悲伤下去。有什么想做的就尽情去做!我爱这个世界美好的事物。我想与人参与、创造这个世界美好的事物,我想要将这个世......
  • js structuredClone All In One
    jsstructuredCloneAllInOnedeepcopy/deepclone_.cloneDeepJSON.parse&JSON.stringifystrucuredClonehttps://developer.mozilla.org/en-US/docs/Glossar......
  • 一个想活得简单的程序猿的2022年终总结!
    前言今年的总结相比以往来说,可写的太少了,但看到我17年开始写的年终总结,已定下每年写下的承诺,因此即便可写的不多,但是还是写下吧,毕竟又过了一年,总有东西会留下!今年事件......
  • go json
    转化为json格式funcMarshal(vinterface{})([]byte,error)//将v(一般为结构体)转化为json格式//json.gopackagemainimport("encoding/json""fm......
  • [20221227]a mutating table error without a trigger!.txt
    [20221227]amutatingtableerrorwithoutatrigger!.txt--//快放假,没什么事情,花一点点时间看了harmfultriggers.blogspot.com,关于触发器的相关危害.--//参考链接:har......