大水文之------端午练练JS好了

news2024/11/26 13:51:35

最近有点不太知道要干啥了,昨天看了集cocos的介绍,下载了个DashBoard,看了看里面的内容,确实有点小震惊,还有些免费的源码可以学习,挺好的。

昨天学习ts,感觉自己的js水平好像不太行,今天看看js题提升下好了。

防抖

含义:也就是王者的回城,一直点是回不去的,点了等会儿就回去了,就是你在一定时间内猛点,他都不管你,你点了100次,会等你点完当做一次来执行。

代码:定义了个防抖函数,可以通过传输需要防抖的函数和防抖时间调用,并且用了闭包访问同一个timer。到这边可以思考一下,这边为什么要使用apply,我直接使用fn()好像也行。我试了下。这里是为了保证传参不丢失,但这边用的例子是不带参的。

// 防抖
function debounce(fn, delay) {
  let timer
  return function (...args) {
    if (timer) {
      clearTimeout(timer)
    }
    timer = setTimeout(() => {
      fn.apply(this, args)
    }, delay)
  }
}
function task() {
  console.log('start')
}
const debounceTask = debounce(task, 1000)
window.addEventListener('scroll', debounceTask)

这边可以了解下apply,更好的了解他

const person = {
  name: 'Alice'
};

function greet(greeting, punctuation) {
  console.log(greeting + ', ' + this.name + punctuation);
}

// 使用 apply 调用 greet 函数,并将 this 设置为 person 对象
greet.apply(person, ['Hello', '!']); // 输出: Hello, Alice!

节流

function throttle(fn, delay) {
  let last = 0 // 上次触发时间
  return (...args) => {
    const now = Date.now()
    if (now - last > delay) {
      last = now
      fn.apply(this, args)
    }
  }
}
 
// 测试
function task() {
  console.log('run task')
}
const throttleTask = throttle(task, 1000)
window.addEventListener('scroll', throttleTask)

跟防抖基本一样,没啥好说的

深拷贝

//   深拷贝
function deepClone(obj, cache = new WeakMap()) {
    if (typeof obj !== 'object') return obj
    if (obj === null) return obj
    if (cache.get(obj)) return cache.get(obj) // 防止循环引用,程序进入死循环
    if (obj instanceof Date) return new Date(obj)
    if (obj instanceof RegExp) return new RegExp(obj)
   
    // 找到所属原型上的constructor,所属原型上的constructor指向当前对象的构造函数
    let cloneObj = new obj.constructor()
    cache.set(obj, cloneObj) // 缓存拷贝的对象,用于处理循环引用的情况
    for (let key in obj) {
      if (obj.hasOwnProperty(key)) {
        cloneObj[key] = deepClone(obj[key], cache) // 递归拷贝
      }
    }
    return cloneObj
  }
   
  // 测试
  const obj = { name: 'Jack', address: { x: 100, y: 200 } }
  obj.a = obj // 循环引用
  const newObj = deepClone(obj)
  console.log(newObj.address === obj.address) // false

这边可以看到定义了一个weakMap, 我以前是没用过,不知道大家见过么

// 创建一个 WeakMap
let metadata = new WeakMap();

// 定义对象
let obj1 = {};
let obj2 = {};
let obj3 = {};

// 向这些对象添加元数据
metadata.set(obj1, { info: 'Metadata for obj1' });
metadata.set(obj2, { info: 'Metadata for obj2' });
metadata.set(obj3, { info: 'Metadata for obj3' });

// 在不改变对象本身的情况下,可以获取对象的元数据
console.log(metadata.get(obj1)); // { info: 'Metadata for obj1' }
console.log(metadata.get(obj2)); // { info: 'Metadata for obj2' }
console.log(metadata.get(obj3)); // { info: 'Metadata for obj3' }

// 当对象不再被引用时,其元数据也会被自动回收
obj1 = null;
console.log(metadata.get(obj1)); // undefined

在这个例子中,metadata 是一个 WeakMap,用于存储对象的元数据。每个对象都可以有自己独立的元数据,而不会修改对象本身的结构。当对象不再被引用时,其对应的元数据也会被自动回收,从而防止内存泄漏。

weakMap的key名只能为对象,无法遍历。key顺序不确定。这是weakmap的缺点

map和foreach的区别

明明经常用。看到这个题目的时候突然也说不上来了,gg。map不改变原数组,foreach改变

// 示例数组
const array = [1, 2, 3, 4, 5];

// 使用 map
const mappedArray = array.map(x => x * 2);
console.log(mappedArray); // [2, 4, 6, 8, 10]
console.log(array); // [1, 2, 3, 4, 5]  原数组未改变

// 使用 forEach
array.forEach((value, index, arr) => {
    arr[index] = value * 2;
});
console.log(array); // [2, 4, 6, 8, 10]  原数组被改变

用set求数组的并集和交集。

这个确实完全不了解,set对象的用法

const array1 = [1, 2, 3, 4];
const array2 = [3, 4, 5, 6];

// 创建两个 Set 对象
const set1 = new Set(array1);
const set2 = new Set(array2);

// 求并集
const unionSet = new Set([...set1, ...set2]);

// 求交集
const intersectionSet = new Set([...set1].filter(x => set2.has(x)));

// 将 Set 转换为数组
const unionArray = [...unionSet];
const intersectionArray = [...intersectionSet];

console.log("并集:", unionArray); // 输出并集
console.log("交集:", intersectionArray); // 输出交集

一个选择框,因数据过多造成卡死,除了懒加载有什么优化方法

1.虚拟滚动、

2.分页加载

3.搜索功能。。。

感觉本质其实也就是懒加载,

computed和watch的区别

一个计算属性一个监视器,comupted只会计算一次,在依赖变化的时候重新计算缓存结果,watch在监听数据变化时触发回调,不局限于计算属性

rpx px em rem的区别

px就是像素点,因该是最常用的

rpx是自适应,常用微信小程序,1rpx大概等于屏幕宽度的1/750

em是相对长度单位,相对父亲的。比如父亲为20px,我是1.5em,那我就是30px

rem是相对于根元素的。即html。比如html为16px,1.5rem就是24px

写一个函数,能随机选出10-100的10个数并放到一个数组中,升序排列

function getRandomNumbers() {
  const numbers = [];
  
  // 生成10个10到100之间的随机数并存入数组
  for (let i = 0; i < 10; i++) {
    const randomNumber = Math.floor(Math.random() * 91) + 10; // 生成10到100之间的随机数
    numbers.push(randomNumber);
  }
  
  // 对数组进行升序排列
  numbers.sort((a, b) => a - b);
  
  return numbers;
}

// 调用函数并输出结果
console.log(getRandomNumbers());

参考博文:2024前端面试12个手写题,你确定会?_前端手写面试题-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1816721.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Three.js】知识梳理十一:Three.js高级纹理类型

在使用Three.js创建3D图形时&#xff0c;纹理扮演着重要的角色&#xff0c;它们可以增加模型的视觉效果&#xff0c;使模型看起来更加真实。本文将深入讨论几种高级纹理类型&#xff1a;法线贴图&#xff08;Normal Maps&#xff09;&#xff0c;凹凸贴图&#xff08;Displacem…

CentOS7发送邮件的设置教程?有哪些步骤?

CentOS7发送邮件时如何配置SMTP&#xff1f;怎样设置群发功能&#xff1f; 无论是系统通知、错误警报还是应用程序的邮件发送&#xff0c;邮件服务都是不可或缺的。在CentOS7中&#xff0c;设置邮件服务可能需要一些配置和调整。AokSend将详细介绍如何在CentOS7上设置并配置邮…

树结构的实现

树的概念 树是一种非线性的数据结构&#xff0c;它是由n个有限节点组成一个具有层次关系的集合&#xff0c;它看起来像棵树&#xff0c;所以称其为“树”。如下图&#xff1a; 树可以分为根和子树&#xff0c;而子树又可以被分为根和子树&#xff0c;故我们可以用递归对其进行实…

.NET周刊【6月第2期 2024-06-09】

国内文章 C#开源实用的工具类库&#xff0c;集成超过1000多种扩展方法 https://www.cnblogs.com/Can-daydayup/p/18230586 文章介绍了一个免费的C#工具类库Z.ExtensionMethods&#xff0c;可以通过NuGet包管理器轻松集成。该库支持.NET Standard 2.0和.NET Framework 4.0&am…

低价和低俗

无底线的低价可不就是低俗了吗&#xff1f; O(∩_∩)O哈哈~ AI说的(引导他说的) 以下几个角度可以进行论证: 低价竞争可能导致质量下降:为了达到极低的价格,商家可能会降低产品或服务的质量标准,使用劣质材料或减少投入。这样可能会影响产品的功能、安全性和使用体验,给消费…

clipboard.js(web页面实现点击复制)

文章目录 codeshow 一个很简单的需求&#xff0c;一个单页面需要一个点击复制的功能 后来在线上找到一个clipboard.js可以实现&#xff0c;这里只用到了最基础的用法&#xff0c;页面样式布局基于bootstrap5.2.3 code <div class"d-flex align-items-center justify-co…

从零实现KV存储项目实战

本项目是从零实现一个完整的、兼容Redis协议的KV数据库项目。 通过每一行代码的编写。你会对整个系统了如指拿&#xff0c;这样对自己基本功的锻炼、对编程能力的提升都是很大的 项目提供完整的视频教程代码 下面是关于KV存储项目的技术大纲&#xff1a; 如果你在学习的过程…

登Cell Press子刊,武汉理工大学团队基于集成学习提出简化电化学模型,0.17s完成3500s的1C恒流放电

2022 年 7 月&#xff0c;不老男神林志颖突发车祸&#xff0c;作为专业赛车手的他驾驶的特斯拉 Model X 在行驶过程中忽然偏离既定轨迹&#xff0c;一头撞向路边的隔离带&#xff0c;随后车辆起火&#xff0c;并在救援车拖吊过程中二次起火&#xff0c;最终整辆车被烧到只剩下了…

NET 使用UDP协议

1.简单的使用UDP对接示例&#xff1a; /// <summary>/// 定时器&#xff0c;每秒定时获取是否有udp数据/// </summary>public DispatcherTimer Timer1 new DispatcherTimer() { Interval new TimeSpan(0, 0, 0, 1) }; public UdpClient SocketUDP { get; set; }/…

unity实现一个大乱斗

1. 游戏说明 大乱斗是一种常见的游戏模式,所有角色会进人同一个场景,玩家可以控制它们移动, 也可以让角色攻击敌 打开客户端即视为进入游戏,在随机出生点刷出角色使用鼠标左键点击场景,角色会自动走到指定位置在站立状态下,点击鼠标右键可使角色发起攻击,角色会向鼠标指向的…

栈和队列(适配器模式模拟)

文章目录 声明stack的介绍queue的介绍deque双端队列简单介绍&#xff08;了解&#xff09;概述优缺点 适配器模式通过容器适配器模拟stack通过容器适配器模拟queue 总结 声明 模拟实现源代码已上传至gitee仓库&#xff1a;stack_queue_learn stack的介绍 stack文档介绍 sta…

优思学院带你走进精益生产:现场观察(Gemba Walk)的艺术

精益生产是一种管理哲学&#xff0c;其目标是在不断提高价值的同时&#xff0c;尽可能地减少浪费和缩短交付时间。实现精益生产的关键步骤之一是现场观察&#xff08;Gemba Walk&#xff09;&#xff0c;通过现场观察&#xff0c;可以深入了解生产流程&#xff0c;发现潜在的浪…

IDM2024手机版+电脑版免费高效的下载管理工具

在数字时代&#xff0c;下载管理软件已经成为我们日常工作和生活中不可或缺的工具。随着互联网的快速发展&#xff0c;我们需要下载的文件数量和大小不断增加&#xff0c;而传统的浏览器下载方式已经无法满足我们对速度和稳定性的需求。因此&#xff0c;选择一个高效的下载管理…

山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(三十二)- 微服务(12)

目录 12.8 RestClient查询文档 12.8.1 快速入门 12.8.2 match&#xff0c; term&#xff0c;bool&#xff0c;range查询 12.8.3 排序和分页 12.8.4 高亮 12.8 RestClient查询文档 12.8.1 快速入门 Testvoid testMatchALL() throws IOException {// 1. 准备requestSearchReq…

服务器防漏扫,主机加固方案来解决

什么是漏扫&#xff1f; 漏扫是漏洞扫描的简称。漏洞扫描是一种安全测试方法&#xff0c;用于发现计算机系统、网络或应用程序中的潜在漏洞和安全弱点。通过使用自动化工具或软件&#xff0c;漏洞扫描可以检测系统中存在的已知漏洞&#xff0c;并提供相关的报告和建议&#xf…

推荐这3个APP,帮助你成长

扇贝阅读 当年考英语四级&#xff0c;扇贝阅读帮了很大的帮&#xff0c;这个应用我推荐给了好多同学使用&#xff0c;大家一致反馈不错。 提供很多原版的英文原著供学习&#xff0c;还自带翻译功能&#xff0c;并且提供单词本&#xff0c;遇到不懂的单词可以纪录到单词本中&am…

STM32理论 —— μCOS-Ⅲ(2/2):时间管理、消息队列、信号量、任务内嵌信号量/队列

文章目录 9. 时间管理9.1 OSTimeDly()9.2 OSTimeDlyHMSM()9.3 OSTimeDlyResume()9.4 延时函数实验 10. 消息队列10.1 创建消息队列函数OSQCreate()10.2 发送消息到消息队列函数(写入队列)OSQPost()10.3 获取消息队列中的消息函数(读出队列)OSQPend()10.4 消息队列操作实验 11. …

Fast R-CNN 与 R-CNN的不同之处

目录 一、Fast R-CNN如何生成候选框特征矩阵 二、 关于正负样本的解释 三、训练样本的候选框 四、Fast R-CNN网络架构 4.1 分类器 4.2 边界框回归器 一、Fast R-CNN如何生成候选框特征矩阵 在R-CNN中&#xff0c;通过SS算法得到2000个候选框&#xff0c;则需要进行2000…

Vulnhub-DC-1,7

靶机IP:192.168.20.141 kaliIP:192.168.20.128 网络有问题的可以看下搭建Vulnhub靶机网络问题(获取不到IP) 前言 1和7都是Drupal的网站&#xff0c;只写了7&#xff0c;包含1的知识点 信息收集 用nmap扫描端口及版本号 进入主页查看作者给的提示&#xff0c;不是暴力破解的…

开源大模型之辩:真假开源

目录 前言开源的定义什么是开源大模型&#xff1f;大模型时代首次出现闭源和开源“齐头并进”开源和闭源不是绝对对立的 大模型到底开源什么&#xff1f;传统开源软件与开源大模型的差别开源软件让开源大模型“受益匪浅” 不同大模型企业&#xff0c;开源、闭源策略不同开源…