Javascript面试基础6【每日更新10】

Gulp

  • gulp是前端开发过程中一种基于流的代码构建工具,是自动化项目的构建利器;它不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成

  • Gulp的核心概念:流
  1. 流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具。在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的,而不用关心流的另一头数据的真正流向
  • gulp正是通过流和代码优于配置的策略来尽量简化任务编写的工作
  • Gulp的特点:
  1. 易于使用:通过代码优于配置的策略,gulp让简单的任务简单,复杂的任务可管理。
  2. 构建快速利用Node.js 流的威力,你可以快速构建项目并减少频繁的IO操作。
  3. 易于学习通过最少的API,掌握 gulp毫不费力,构建工作尽在掌握:如同一系列流管道
     

Vue双向数据绑定

Vue核心基础-CSDN博客 

设计模式—观察者模式与发布订阅-CSDN博客

vue.js 则是采用数据劫持结合发布者-订阅者模式的方式,通过0bject.defineProperty( 来劫持各个属性的setter ,getter ,在数据变动时发布消息给订阅者,触发相应的监听回调
 

事件的各个阶段

在JavaScript中,事件处理是一个重要的概念,它允许开发者在用户与网页进行交互时执行代码。事件处理通常涉及到事件的各个阶段,这些阶段也被称为事件流(Event Flow)或事件传播(Event Propagation)。主要可以分为三个阶段:捕获阶段(Capturing Phase)、目标阶段(Target Phase,也称为事件处理阶段或冒泡前的激活阶段)、冒泡阶段(Bubbling Phase)。

1. 捕获阶段(Capturing Phase)

  • 顺序:从文档的根节点(通常是document对象)开始,向下传播到目标元素。
  • 特点:在捕获阶段,事件处理器会从最外层的节点开始触发,然后向事件的目标节点传播。这个阶段的目的是在事件到达目标节点之前,先给外层的元素机会来处理这个事件。
  • 用途:捕获阶段通常用于事件在到达目标元素之前进行拦截处理,例如,阻止事件进一步传播或修改事件对象。

2. 目标阶段(Target Phase)

  • 顺序:当事件到达目标元素时,会触发目标元素上的事件处理器。
  • 特点:在这个阶段,事件处理器被绑定在目标元素上,即用户实际与之交互的元素。这通常是我们设置事件监听器的地方。
  • 注意:技术上讲,目标阶段并不是事件传播的一个独立阶段,但它发生在捕获阶段和冒泡阶段之间,是事件处理器被目标元素实际调用的时刻。

3. 冒泡阶段(Bubbling Phase)

  • 顺序:从目标元素开始,向上传播到文档的根节点。
  • 特点:在冒泡阶段,事件会从目标元素开始,一直向上传播到DOM树的顶层。这个阶段的目的是允许事件在到达顶层之前,沿途的每个节点都有机会处理这个事件。
  • 用途:冒泡阶段常用于在不特定知道哪个元素会被点击的情况下,处理事件。例如,点击了列表中的某个项,但你可能希望无论点击了哪个项,都能触发同一个事件处理器。

设置事件监听器时指定阶段

在JavaScript中,使用addEventListener方法添加事件监听器时,可以通过第三个参数来指定监听器是在捕获阶段还是冒泡阶段触发。如果省略这个参数,或者将其设置为false,则监听器会在冒泡阶段触发。如果设置为true,则监听器会在捕获阶段触发。

element.addEventListener('click', function(event) {  // 事件处理代码  
}, true); // 在捕获阶段触发  element.addEventListener('click', function(event) {  // 事件处理代码  
}, false); // 在冒泡阶段触发(默认)

let VS var VS const

  • let
  1. 允许你声明一个作用域被限制在块级中的变量、语句或者表达式。
  2. let绑定不受变量提升的约束,这意味着let声明不会被提升到当前
  3. 该变量处于从块开始到初始化处理的“暂存死区”
  • var
  1. ·声明变量的作用域限制在其声明位置的上下文中,而非声明变量总是全局的
  2. 由于变量声明(以及其他声明)总是在任意代码执行之前处理的,所以在代码中的任意位置声明变量总是等效于在代码开头声明
  • const
  1. 声明创建一个值的只读引用(即指针)
  2. 基本数据当值发生改变时,那么其对应的指针也将发生改变,故造成const申明基本数据类型时”再将其值改变时,将会造成报错,例如const a = 3 ;a = 5 时将会报错
  3. 但是如果是复合类型时,如果只改变复合类型的其中某个Value 项时,将还是正常使用
     

快速让一个数组乱序

sort方法

const arr=[1,2,3,4,5,6];
arr.sort(function(a,b){return Math.random()-0.5;
})

Fisher-Yates洗牌算法

在JavaScript中,快速让一个数组乱序(即打乱数组元素的顺序)的一种常用方法是使用Fisher-Yates洗牌算法(也称为Knuth洗牌算法)。这种方法的基本思想是遍历数组元素,并在每一步中随机选择一个未处理的元素与当前元素交换位置。

以下是一个使用Fisher-Yates洗牌算法来打乱数组顺序的示例代码:

function shuffleArray(array) {  for (let i = array.length - 1; i > 0; i--) {  // 生成一个0到i的随机索引  const j = Math.floor(Math.random() * (i + 1));  // 交换array[i]和array[j]  [array[i], array[j]] = [array[j], array[i]];  }  return array;  
}  // 示例  
const myArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];  
console.log(shuffleArray(myArray));

 如何渲染几万条数据并不卡住界面

考察了如何在不卡住页面的情况下渲染数据,也就是说不能一次性将几万条都渲染出来,而应该一次渲染部分DOM,那么就可以通过requestAnimationFrame来每16 ms刷新一次
 

requestAnimationFrame 是 Web API 的一部分,它用于在浏览器下一次重绘之前调用指定的函数来更新动画。这是一种高效的方式来创建平滑的动画,因为它允许浏览器优化和最小化重绘和重排,从而提供更好的性能和用户体验。

当你使用 requestAnimationFrame 时,你需要提供一个回调函数作为参数。浏览器会在这个函数准备好进行屏幕更新之前调用它。这个函数通常用于更新动画的当前状态,比如改变元素的位置或样式。

基本用法

function step(timestamp) {  // 更新动画状态  // 例如,改变元素的位置  // ...  // 如果需要继续动画,则再次调用 requestAnimationFrame  requestAnimationFrame(step);  
}  // 启动动画  
requestAnimationFrame(step);

优点

  1. 高效requestAnimationFrame 由浏览器进行优化,以确保动画的平滑性和性能。
  2. 自动时间间隔:你不需要自己设置时间间隔(如使用 setTimeout 或 setInterval),浏览器会基于屏幕刷新率来调用你的回调函数。
  3. 节省CPU:当标签页或窗口不在前台时,requestAnimationFrame 会自动暂停调用回调函数,从而节省CPU资源。

停止动画

要停止动画,你可以简单地不再调用 requestAnimationFrame。但是,如果你需要从一个特定的回调中停止动画(例如,基于某些条件),你可能需要将 requestAnimationFrame 的返回值(一个ID)保存起来,并使用 cancelAnimationFrame 来取消它。

let animationId = null;  function startAnimation() {  animationId = requestAnimationFrame(step);  
}  function stopAnimation() {  if (animationId) {  cancelAnimationFrame(animationId);  animationId = null;  }  
}  function step(timestamp) {  // ... 更新动画状态  // 根据需要决定是否继续动画  // requestAnimationFrame(step);  
}  // 启动和停止动画  
startAnimation();  
// ... 在某个时刻停止动画  
stopAnimation();

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

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

相关文章

【Django】前端技术HTML常用标签(开发环境vscode)

文章目录 安装两个常用插件HTML常用标签定义文档类型DOCTYPE网页的结构html/head//title/body/div标题h1/h2/h3/h4/h5分割线hr段落 p列表ul/li,ol/li超链接a文本span图片img按钮button表格table(table、tr、th、td)表单form 安装两个常用插件…

基于riscv64架构的Dayu800开发板的napi_demo开发介绍

itopen组织1、提供OpenHarmony优雅实用的小工具2、手把手适配riscv qemu linux的三方库移植3、未来计划riscv qemu ohos的三方库移植 小程序开发4、一切拥抱开源,拥抱国产化 一、环境准备工作 1.1 Ubuntu20.04环境配置 如果已经配置OpenHarmony的编译环境则…

目标检测 YOLOv5-7.0 详细调试自制数据集实战

目标检测 YOLOv5-7.0 详细调试&自制数据集实战 一、项目介绍及环境配置(一)项目解读(二)版本选择(三)环境配置 二、如何利用YOLOv5进行预测(detect.py)(一&#xff0…

Windows 实用小工具:窗口钉子/文件管理 2024/7/27

一: wintop 窗口置顶工具 二:WinDirStat 这是一个免费的、开源的磁盘使用分析工具,适用于Windows系统。它会扫描你的硬盘,列出所有文件和文件夹的大小,并以图形化的方式展示,便于理解。 可以用来检测硬盘文件夹占用从而,酌情处…

【C#】获取DICOM图像像素的像素值

8位像素深度的像素值 public byte GetGreyValue(int x, int y) {x Math.Min(x, m_nWidth - 1);y Math.Min(y, m_nHeight - 1);unsafe{byte* greyValue (byte*)m_pDicomData.ToPointer() y * m_nWidth x;return *greyValue;} } 16位像素深度的像素值 public ushort GetG…

JAVA.抽象、接口、内部类

1.抽象 共性,父类定义抽象方法,子类必须重写,或者子类也是抽象类 示例代码 animal package animalabstract;//定义抽象类animal public abstract class animal {String name;int age;//定义抽象方法eat,子类必须重写public abs…

Java给定一些元素随机从中选择一个

文章目录 代码实现java.util.Random类实现随机取数(推荐)java.util.Collections实现(推荐)Java 8 Stream流实现(不推荐) 完整代码参考(含测试数据) 在Java中,要从给定的数据集合中随机选择一个元素,我们很容易想到可以使用 java.…

Redis快速入门(一)

一、初识Redis 1、认识NoSQL NoSql可以翻译做Not Only Sql(不仅仅是SQL),或者是No Sql(非Sql的)数据库。是相对于传统关系型数据库而言,有很大差异的一种特殊的数据库,因此也称之为非关系型数据库。   a)结构化与非结构化   传统关系型数据库是结构化数据,每一张…

【Linux】进程IO|系统调用|open|write|文件描述符fd|封装|理解一切皆文件

目录 ​编辑 前言 系统调用 open 参数flags 参数mode write 追加方式 read close 文件描述符 打开多个文件并观察其文件描述符 C语言文件操作 理解一切皆文件 理解open操作 前言 各类语言的文件操作其实是对系统调用的封装 我们经常说,创建一个文件&a…

力扣第三十七题——解数独

内容介绍 编写一个程序,通过填充空格来解决数独问题。 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图) 数独…

每天一个数据分析题(四百四十四)- 数据仓库

企业数据仓库里面的数据一般是由业务数据经过ETL技术处理后来的,以下关于ETL的说法错误的是 A. ETL过程中的主要环节是数据抽取、数据转换和加工、数据流转 B. 增量数据抽取过程中,提取增量数据的方法有通过时间戳、建立触发器、全表比对、日志比对等 …

springboot整合pgsql

demo代码说明 springboot使用mybatis-plus整合pgsql 在springboot项目中使用pgsql,使用了mybatis-plus、druid 代码见 spring-demo: springboot 结合各种插件 demo 注意事项: 版本兼容 正常springboot使用,但是注意需要添加pgsql正确版…

CVE-2024-39700 (CVSS 9.9):JupyterLab 模板中存在严重漏洞

在广泛使用的 JupyterLab 扩展模板中发现了一个严重漏洞,编号为CVE-2024-39700 。此漏洞可能使攻击者能够在受影响的系统上远程执行代码,从而可能导致大范围入侵和数据泄露。 该漏洞源于在扩展创建过程中选择“测试”选项时自动生成“update-integratio…

VIM基础配置

1. CTAGS配置 下载 上传虚拟机,解压,进入目录 tar -xzvf ctags-5.8.tar.gz cd ctags-5.8/编译 ./configure sudo make sudo make install查看是否安装成功 ctags --version打印如下 2. 使用Vundle 下载 git clone https://github.com/VundleVim/Vund…

Linux并发程序设计(3):守护进程

目录 前言 一、介绍 1.1 概念 1.2 特点 1.3 举例 二、系统编程 2.1 setsid函数 2.2 getpid函数 2.3 getsid函数 2.4 getpgid函数 2.5 chdir函数 三、代码例程 3.1 使子进程在后台运行 3.2 使子进程脱离原终端 3.3 更换目录,并设定权限(非…

React--Redux

Redux 是一个用于 JavaScript 应用的状态管理库,特别是在 React 应用中非常流行。下面我将详细介绍一个使用 Redux 的简单案例,包括设置 Redux 环境、创建 store、定义 actions 和 reducers,以及如何连接 React 组件。 步骤 1: 安装依赖 首…

基于STM32通过云平台实现智慧大棚【手机远程查看温湿度】【报警】

文章目录 一、成果演示二、所用到的模块三、实现的功能四、接线说明五、WIFI模块配置步骤5.1云平台介绍5.2云平台使用5.3使用USB转TTL测试联通云平台 六、STM32代码编写七、手机上查看数据6.1下载软件(仅限安卓手机)6.2操作 一、成果演示 STM32通过物联网…

String、StringBuffer和StringBuilder

一、String类 1. String类的理解 2. String类结构 1. String类实现了Serializable接口,说明String对象可以串行化,即可以在网络上传输 2. String类实现了Comparable接口,说明String对象可以比较 String底层是一个字符数组,这个数组里存的是字符串的内容 例如:…

005 仿muduo实现高性能服务器组件_通信连接管理

​🌈个人主页:Fan_558 🔥 系列专栏:仿muduo 📒代码仓库: 项目代码 🌹关注我💪🏻带你学更多知识 文章目录 前言Channel模块设计原因整体设计代码如下 Connection模块设计原…

Florence2:Advancing a unified representation for a variety of vision tasks

Florence-2模型:开启统一视觉基础模型的新篇章_florence -2-CSDN博客文章浏览阅读1.1k次,点赞108次,收藏109次。Florence-2是由微软Azure AI团队开发的一款多功能、统一的视觉模型。它通过统一的提示处理不同的视觉任务,表现出色且优于许多大型模型。Florence-2的设计理念是…